Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^4: The importance of avoiding the shell

by Corion (Patriarch)
on Sep 27, 2014 at 12:09 UTC ( [id://1102217]=note: print w/replies, xml ) Need Help??


in reply to Re^3: The importance of avoiding the shell
in thread The importance of avoiding the shell

Perl has special logic to recognize 2>&1 to make this idea work on Windows. The Windows default shell (cmd.exe) does not understand 2>&1, but (too) many programmers use this idiom.

Replies are listed 'Best First'.
Re^5: The importance of avoiding the shell
by BrowserUk (Patriarch) on Sep 27, 2014 at 12:50 UTC
    The Windows default shell (cmd.exe) does not understand 2>&1

    Say what?


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

      At least on my machine, it doesn't:

      C:\Users\Corion>perl -le "warn 'foo';print 'bar'" foo at -e line 1. bar C:\Users\Corion>perl -le "warn 'foo';print 'bar'" >tmp.txt foo at -e line 1. C:\Users\Corion>perl -le "warn 'foo';print 'bar'" 2>&1 >tmp.txt foo at -e line 1. C:\Users\Corion>ver Microsoft Windows [Version 6.1.7601] C:\Users\Corion>

      Update: And I think I've been using the shell direction wrong, because it understands it if I redirect the filehandles in a different order:

      C:\Users\Corion>perl -le "warn 'foo';print 'bar'" >tmp.txt 2>&1 C:\Users\Corion>type tmp.txt foo at -e line 1. bar

      I always think "First, redirect filehandle 2 to filehandle 1, then redirect the output to filehandle 1 to a file.". But that this is wrong and I need to do it the other way around.

        Update: And I think I've been using the shell direction wrong, because it understands it if I redirect the filehandles in a different order: ... But that this is wrong and I need to do it the other way around.

        Indeed. It does seem somewhat backwards, but it has always been that way.

        When 2>&1 is seen, stderr is redirected to wherever stdout is pointing at that time. If you then redirect stdout somewhere else, stderr is not then re-redirected.

        So if you want to redirect both to the same place, you have to redirect stdout first; then 2>&1 does the expected thing.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.
Re^5: The importance of avoiding the shell
by parv (Parson) on Sep 27, 2014 at 12:12 UTC

    Thanks much Corion; that helps in my understanding.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (6)
As of 2024-04-19 10:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found