Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^2: capturing stderr of echo piped to a file

by boftx (Deacon)
on Oct 29, 2014 at 18:58 UTC ( [id://1105532]=note: print w/replies, xml ) Need Help??


in reply to Re: capturing stderr of echo piped to a file
in thread capturing stderr of echo piped to a file

Your statement is simply not true. The order of the redirects doesn't matter and in my experience having 2>&1 at the end of the line is much more common. A simple test on the command line with a perl script that issues a warn as well as a print statement will demonstrate this.

You must always remember that the primary goal is to drain the swamp even when you are hip-deep in alligators.

Replies are listed 'Best First'.
Re^3: capturing stderr of echo piped to a file
by Crackers2 (Parson) on Oct 29, 2014 at 19:17 UTC

    Perhaps you should just try it?

    > { echo out; echo err >&2; } >f1 2>&1 > cat f1 out err > { echo out; echo err >&2; } 2>&1 >f1 err > cat f1 out

    Redirection order definitely DOES matter in the shell. (Hmm, unless it's shell-specific? I'm using bash)

    And just to do exactly what you said..

    > perl -e'print "print\n"; warn "warn"' >f1 2>&1 > cat f1 warn at -e line 1. print > perl -e'print "print\n"; warn "warn"' 2>&1 >f1 warn at -e line 1. > cat f1 print

    In the first case both print and warn go to the file, in the second case warn goes to stdout and print to the file.

      ~/stuff > perl foobar.pl Normal STDOUT Going to STDERR ~/stuff > echo 'Just a starting point > ' >JGBtest.txt ~/stuff > cat JGBtest.txt Just a starting point ~/stuff > perl foobar.pl >>JGBtest.txt 2>&1 ~/stuff > cat JGBtest.txt Just a starting point Going to STDERR Normal STDOUT ~/stuff > cat foobar.pl #!/usr/bin/perl use warnings; use strict; print "Normal STDOUT\n"; warn "Going to STDERR\n"; exit; __END__ ~/stuff >
      You must always remember that the primary goal is to drain the swamp even when you are hip-deep in alligators.

        You didn't run the test with reversed redirection, so the above doesn't actually show anything new. Here's what I get with your code, including also a reversed order test:

        ~> perl foobar.pl Normal STDOUT Going to STDERR ~> echo 'Just a starting point > > ' >JGBtest.txt ~> cat JGBtest.txt Just a starting point > ~> perl foobar.pl >>JGBtest.txt 2>&1 ~> cat JGBtest.txt Just a starting point > Going to STDERR Normal STDOUT ~> perl foobar.pl 2>&1 >>JGBtest.txt Going to STDERR ~> cat foobar.pl #!/usr/bin/perl use warnings; use strict; print "Normal STDOUT\n"; warn "Going to STDERR\n"; exit; __END__ ~>

        Which again shows that the redirection order does matter, and in the 2>&1 >>file case, STDERR goes to the output, not the file.

        Update: And just to illustrate it in one more way...

        ~> perl foobar.pl >>JGBtest.txt 2>&1 & [1] 22571 ~> ll /proc/22571/fd total 0 lrwx------ 1 user group 64 2014-10-29 16:31 0 -> /dev/pts/11 l-wx------ 1 user group 64 2014-10-29 16:31 1 -> /home/user/JGBtest.tx +t l-wx------ 1 user group 64 2014-10-29 16:31 2 -> /home/user/JGBtest.tx +t ~> perl foobar.pl 2>&1 >>JGBtest.txt & [2] 22578 ~> ll /proc/22578/fd total 0 lrwx------ 1 user group 64 2014-10-29 16:32 0 -> /dev/pts/11 l-wx------ 1 user group 64 2014-10-29 16:32 1 -> /home/user/JGBtest.tx +t lrwx------ 1 user group 64 2014-10-29 16:32 2 -> /dev/pts/11 ~> cat foobar.pl #!/usr/bin/perl sleep(100);

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1105532]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (6)
As of 2024-04-19 08:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found