首先要说明的是,不要使用which来进行判断,理由如下:
1.which非SHELL的内置命令,(用type来判断某个命令是否为内置命令。)用起来比内置命令的开销大,并且非内置命令会依赖平台的实现,不同平台的实现可能不同。
2.很多系统的which并不设置退出时的返回值,即使要查找的命令不存在,which也返回0
3.很多linux发行版上的which会做一些邪恶的事情,比如改变输出结果甚至会接入到包管理器中。
用下明几个命令:
$ command -v foo >/dev/null 2>&1 || { echo >&2 "I require foo but it's not installed. Aborting."; exit 1; } $ type foo >/dev/null 2>&1 || { echo >&2 "I require foo but it's not installed. Aborting."; exit 1; } $ hash foo 2>/dev/null || { echo >&2 "I require foo but it's not installed. Aborting."; exit 1; }