[vox-tech] Re: quick, stupid bash question

Ken Bloom vox-tech@lists.lugod.org
Wed, 29 May 2002 17:10:14 -0700


>
>
>---ORIGINAL MESSAGE---
>Date: Wed, 29 May 2002 11:32:49 -0700
>From: nbs <nbs@sonic.net>
>To: vox-tech@lists.lugod.org
>Subject: Re: [vox-tech] quick, stupid bash question
>Reply-To: vox-tech@lists.lugod.org
>
>On Wed, May 29, 2002 at 11:29:29AM -0700, Peter Jay Salzman wrote:
>
>> 
>>ok, haven't tried this, but this looks to me like:
>>
>>put stderr into stdout
>>redirect stdout (and therefore stderr) into /dev/null
>>pipe stdout (which should be null) to grep.
>>
>>yet it works.  where is my thinking going wrong?
>>
>
>I'm guessing the order of operation goes backwards.
>So:
>
>  "redirect stdout to devnull,
>   shove stderr through stdout"
>
>and then finally, on the other end, again, "pipe it to grep"
>
>
>
>I'm far from a bash expert, though.  Most of what I know I learned from
>your bash talk, and most of that has evaporated off the top of my head. ;)
>
>-bill!
>
My only qualifications to answer this are having looked at the bash 
texinfo page, but I think it works like this:

send stderr to where stdout is going now
send stdout to /dev/null
now pipe

I would think that these two constructs would be different (and the 
first one would be nonsensical):

$ strace lsof 2>&1 1> /dev/null | grep System
$ (strace lsof 2>&1 1> /dev/null) | grep System

but they seem to actually act the same.

./ascript 1>&2 2>&1 #sends everything to standard error
./ascript 2>&1 1>&2 #sends everything to standard output

As powerful as this is, there's no way to swap standard error and standard output.