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

Re^2: Can't exec "command": No such file or directory error

by Fletch (Bishop)
on Dec 15, 2022 at 01:26 UTC ( [id://11148878]=note: print w/replies, xml ) Need Help??


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

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.

Replies are listed 'Best First'.
Re^3: Can't exec "command": No such file or directory error
by haukex (Archbishop) on Dec 22, 2022 at 11:01 UTC
    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.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11148878]
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: (5)
As of 2024-04-23 18:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found