Size: 1394
Comment:
|
Size: 1659
Comment: clean-up
|
Deletions are marked like this. | Additions are marked like this. |
Line 14: | Line 14: |
If these builtins are not available (because you're in a Bourne shell, or whatever), then you may have to rely on the external command {{{which}}} (which is often a csh script, although sometimes a compiled binary). Unfortunately, {{{which}}} does ''not'' set a useful exit code -- and it doesn't even write errors to stderr! Therefore, one must parse its output. | If these builtins are not available (because you're in a Bourne shell, or whatever), then you may have to rely on the external command {{{which}}} (which is often a csh script, although sometimes a compiled binary). Unfortunately, {{{which}}} does ''not'' set a useful exit code (on any system but GNU/Linux) -- and it doesn't even write errors to stderr! Therefore, one must parse its output. |
Line 18: | Line 18: |
x=$(LC_ALL=C which qwerty 2>&1) | # Backticks here because we're assuming a legacy Bourne shell. x=`LC_ALL=C which qwerty 2>&1` |
Line 27: | Line 28: |
Note that its output is ''not'' consistent across platforms. On HP-UX, for example, it prints {{{no qwerty in /path /path /path ...}}}; on OpenBSD, it prints {{{qwerty: Command not found.}}}; on Debian and SuSE, it prints nothing at all; and on Gentoo, it actually prints something to stderr. |
|
Line 28: | Line 31: |
# Another easy way in gnu: if [ -z "$(which qwerty)" ]; then |
# Another easy way that works only on gnu: if ! which qwerty >/dev/null 2>&1; then |
Line 35: | Line 38: |
(Also note that its output is ''not'' consistent across platforms. On HP-UX, for example, it prints {{{no qwerty in /path /path /path ...}}}; on OpenBSD, it prints {{{qwerty: Command not found.}}}; and on GNU/Linux, it prints nothing at all.) | (Although, on a GNU system, one would generally prefer to use one of the Bash builtins instead.) |
How can I determine whether a command exists anywhere in my PATH?
In BASH, there are a couple builtins that are suitable for this purpose: hash and type. Here's an example using hash:
if hash qwerty 2>/dev/null; then echo qwerty exists else echo qwerty does not exist fi
If these builtins are not available (because you're in a Bourne shell, or whatever), then you may have to rely on the external command which (which is often a csh script, although sometimes a compiled binary). Unfortunately, which does not set a useful exit code (on any system but GNU/Linux) -- and it doesn't even write errors to stderr! Therefore, one must parse its output.
# Last resort -- using which(1) # Backticks here because we're assuming a legacy Bourne shell. x=`LC_ALL=C which qwerty 2>&1` case "$x" in no\ *\ in\ *) echo qwerty does not exist;; *Command\ not\ found.) echo qwerty does not exist;; '') echo qwerty does not exist;; *) echo qwerty exists;; esac
Note that its output is not consistent across platforms. On HP-UX, for example, it prints no qwerty in /path /path /path ...; on OpenBSD, it prints qwerty: Command not found.; on Debian and SuSE, it prints nothing at all; and on Gentoo, it actually prints something to stderr.
# Another easy way that works only on gnu: if ! which qwerty >/dev/null 2>&1; then echo "$0: install qwerty first" exit 1 fi
(Although, on a GNU system, one would generally prefer to use one of the Bash builtins instead.)