I use Bash as my interactive shell and I was wondering if there was an easy way to get Bash to run a system command instead of a shell builtin command in the case where they both share the same name.
For example, use the system kill
(from util-linux
) to print the process id (pid) of the named process(es) instead of sending a signal:
$ /bin/kill -p httpd
2617
...
Without specifying the full path of the system command, the Bash builtin is used instead of the system command. The kill
builtin doesn’t have the -p
option so the command fails:
$ kill -p httpd
bash: kill: p: invalid signal specification
I tried the answers listed in Make bash use external `time` command rather than shell built-in but most of them only work because time
is actually a shell keyword – not a shell builtin.
Other than temporarily disabling the Bash builtin with enable -n kill
, the best solution I’ve seen so far is to use:
$(which kill) -p httpd
Are there other easier (involve less typing) ways to execute an external command instead of a shell builtin?
Note that kill
is just an example and I’d like a generalised solution similar to the way that prefixing with the command
builtin prevents functions which have the same name as an external command from being run. In most cases, I usually prefer to use the builtin version as it saves forking a new process and some times the builtin has features that the external command doesn’t.
which kill
in backticks (can't put them in comments) is slightly shorter. – abligh Nov 12 '15 at 14:15$(…)
— see this, this, and this. – G-Man Says 'Reinstate Monica' Apr 19 '16 at 20:56