Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Can't exec "command": No such file or directory error (updated!)

by haukex (Archbishop)
on Dec 14, 2022 at 22:24 UTC ( [id://11148870]=note: print w/replies, xml ) Need Help??


in reply to Can't exec "command": No such file or directory error

I don't know much about zsh, but my best guess is that this might be The problem of "the" default shell. You might try system('/bin/zsh','-c','command task list');, but be aware of the security implications of doing this with with anything other than a fixed string.

Update: What is task? Because if it's a binary then my advice here is wrong - see my reply here.

Replies are listed 'Best First'.
Re^2: Can't exec "command": No such file or directory error
by Fletch (Bishop) on Dec 15, 2022 at 01:26 UTC

    In both zsh and bash the "command" shell builtin (and its cousin builtin) are helpers for bypassing shell functions or aliases. When you prefix something with it then the shell explicitly searches for an external thing to run rather than running any shell function or builtin of the same name. The usual usage is for something like having a shell function of the same name wrapping something (to say manipulate arguments passed) whenever in the function you want to actually call the "real" program (or in the case of builtin the shell's actual builtin command of the same name (e.g. you could write a cd shell fn which then actually calls builtin cd blahblah to make the shell change the cwd)). If you didn't then the shell would just recursively call the same function over and over.

    At any rate two closing thoughts: zsh is just awesome and anyone not using it as their interactive or programming shell is missing out; and unless you've got some reaaaaaly wonky default shell environment you're dealing with there's probably not much reason to prefix something you're calling from perl (or anything else "external") with it "command".

    (The command in /usr/bin on OSX is actually a bash script actually which calls builtin which is just weird . . .)

    Edit: made advice about "command" being unneeded more explicit.

    The cake is a lie.
    The cake is a lie.
    The cake is a lie.

      In both zsh and bash the "command" shell builtin (and its cousin builtin) are helpers for bypassing shell functions or aliases.

      Thanks for pointing this out and sorry for not responding sooner. I admit I haven't used command and I should have looked it up first, because of course that changes things - it seems strange to want to call the shell only to tell the shell to not use a builtin or function. As a side note, interestingly, it looks like command is slightly different in the two shells: bash says "Runs command with arguments ignoring any shell function named command. Only shell builtin commands or commands found by searching the PATH are executed." while in zsh: "The simple command argument is taken as an external command instead of a function or builtin and is executed. If the POSIX_BUILTINS option is set, builtins will also be executed but certain special properties of them are suppressed." - another argument for avoiding The problem of "the" default shell.

      nysus: What is task? If it's something like Taskwarrior (where apparently task list is a valid command), then my suggestion above is actually wrong because no shell is needed, and you should be using something like system('/usr/bin/task','list') instead. See also my node Calling External Commands More Safely.

Re^2: Can't exec "command": No such file or directory error
by nysus (Parson) on Dec 14, 2022 at 22:53 UTC

    Beautiful. Worked. And thanks for the link, I'll take a look. My shell foo is weak.

    $PM = "Perl Monk's";
    $MC = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar Parson";
    $nysus = $PM . ' ' . $MC;
    Click here if you love Perl Monks

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (2)
As of 2024-04-20 03:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found