[sf-perl] [ot?] no pipe for you

Joseph Brenner doom at kzsu.stanford.edu
Tue Sep 18 16:20:22 PDT 2012

Hm.  Never heard of this one...

David Alban <extasia at extasia.org> wrote:

> a user said that one of my perl library routines that does sudo
> commands was hanging.  the user was using the routine to restart a
> system service (i.e., invoke an /etc/init.d script via /sbin/service).
> i started poking and it was hanging in my routine at the line:
>   @results = qx{ $command 2>&1 };
> we've used this routine for a few years without anything like this happening.
> so i poke some more and found that all of these act "normally":
>   $ sudo service foo restart
>   $ sudo service foo stop
>   $ sudo service foo start
>   $ sudo bash -xv /etc/init.d/foo stop 2>&1 | tee junk
> but...  these do their actions successfully (start and restart) and
> then subsequently fail to return the command prompt (i.e., hang):
>   $ sudo bash -xv /etc/init.d/foo start 2>&1 | tee junk
>   $ sudo bash -xv /etc/init.d/foo restart 2>&1 | tee junk
> these "hang", too:
>   $ sudo service wso2am start 2>&1 | tee ~/junk
>   $ sudo service wso2am restart 2>&1 | tee ~/junk
> i remember discovering that the ps command behaves different if its
> output goes to a pipe (it doesn't truncate the output at the edge of
> your screen), but might anyone here have an idea about why the start
> and restart hang when their output it going to a pipe?

Speculating wildly...

Do the scripts involved play games with checking `tty -s` for non-zero return?
Maybe fancy sudo redirect pipe combos can convince them there's
nothing connected to stdin or stdout?  (Seems unlikely).

Could there be a peculiar permissions problem on teeing to ~/junk?
Typically you'd expect "sudo" to give you higher permissions, but if
it's just giving you *different* permissions, you might have trouble
accessing a location in a networked file system.  (Also seems

Are you really multiplying redirects, like this (I've never tried
this... don't see why it would cause something to hang, but it seems

   sudo bash -xv /etc/init.d/foo start 2>&1 | tee junk 2>%1

More information about the SanFrancisco-pm mailing list