which curl >/dev/null 2>&1
?
(what I learned from man bash)
which curl >/dev/null 2>&1
?
(what I learned from man bash)
One shouldn't use which at all. It forks an external process, it is vulnerable to PATH issues unless you specify what will surely be a non-portable path to the executable, often isn't included in chroot'd environments, and doesn't actually return an exit status on many platforms. In short: it sucks in almost all possible ways you could hope to suck.
The proper expression to use is:
command -v curl >/dev/null 2>&1
If you know you are in bash, type -P and possibly hash become acceptable alternatives, but then... why not just use command -v right?http://stackoverflow.com/questions/592620/check-if-a-program...
command curl # optionally 2> /dev/null
# but there really shouldn't be any
# output -- so any error you probably
# want to see...
do what's intended (exit with non-zero return if curl isn't available as a command)?[edit: Because command runs the command by default, it outputs info with -v!. So if the command does something by default (eg: command halt) -- then:
command halt #halts!
command -v halt #outputs something like /sbin/halt
Whops.]This is why (to redirect both stdout and stderr to $file) you have to do e.g. 1>$file 2>&1 rather than the more obvious-looking 2>&1 1>$file.
`> /dev/null 2>&1` will drop both stdout and stderr.
For myself, with `which` I would just use `> /dev/null`, as `which` writes to stdout and not stderr: if anything comes through stderr, you probably want to know about it.
PS. I think "which" will never produce anything on stderr