Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re^4: Reading output of external program without Shell

by haukex (Archbishop)
on Nov 15, 2017 at 20:38 UTC ( [id://1203514]=note: print w/replies, xml ) Need Help??


in reply to Re^3: Reading output of external program without Shell
in thread Reading output of external program without Shell

this doesn't call a shell

The code you showed does, but if you give run an arrayref, it does not (at least on *NIX):

$ perl -wMstrict -MIPC::Run=run -e' run "pstree -A $$" ' perl---sh---pstree $ perl -wMstrict -MIPC::Run=run -e' run ["pstree","-A",$$] ' perl---pstree

Replies are listed 'Best First'.
Re^5: Reading output of external program without Shell
by karlgoethebier (Abbot) on Nov 16, 2017 at 11:34 UTC
    "The code you showed does..."

    Ah, right. Thanks for correcting me. A precious hint.

    BTW, from the friendly manual:

    # Launch a sub process directly, no shell. Can't do redirection # with this form, it's here to behave like system() with an # inverted result. $r = run "cat a b c";

    Perhaps i missed something.

    "Es ist immer komplizierter" (Ludwig Marcuse)

    Still my favorite quote and motto.

    Best regards, Karl

    «The Crux of the Biscuit is the Apostrophe»

    perl -MCrypt::CBC -E 'say Crypt::CBC->new(-key=>'kgb',-cipher=>"Blowfish")->decrypt_hex($ENV{KARL});'Help

      Hm, you're right, it does say that!

      # Call this system's shell, returns TRUE on 0 exit code # THIS IS THE OPPOSITE SENSE OF system()'s RETURN VALUE run "cat a b c" or die "cat returned $?"; # Launch a sub process directly, no shell. Can't do redirection # with this form, it's here to behave like system() with an # inverted result. $r = run "cat a b c";

      I don't see how run would know that it is being called as run() or die vs. $r = run(). Also, I can't get it to work...

      $ perl -wMstrict -MIPC::Run=run -e' my $r = run "pstree -A $$" ' perl---sh---pstree

      Later on the docs say:

      run(), start(), and harness() can all take a harness specification as input. A harness specification is either a single string to be passed to the systems' shell

      And, on the other hand, the IPC::Run docs don't explicitly say that run [...] doesn't use the shell, although in the code you can find exec { $_[0] } @_;. It's all a bit confusing unfortunately.

        "...a bit confusing..."

        Yes. I asked the author. Best regards, Karl

        «The Crux of the Biscuit is the Apostrophe»

        perl -MCrypt::CBC -E 'say Crypt::CBC->new(-key=>'kgb',-cipher=>"Blowfish")->decrypt_hex($ENV{KARL});'Help

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (4)
As of 2025-07-16 13:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.