问:
如何验证程序是否存在,以一种要么返回错误并退出,要么继续执行脚本的方式?
这看起来应该很容易,但它一直困扰着我。
答:
POSIX 兼容:
command -v <the_command>
使用示例:
if ! command -v <the_command> &> /dev/null
then
echo "<the_command> could not be found"
exit
fi
对于 Bash 特定环境:
hash <the_command> # 用于常规命令。或
type <the_command> # 检查内置项和关键字
避免使用 which。它是一个外部进程,相对而言 hash、type 或 command 这样的内置程序执行效率更高,你还可以依靠内置程序来实际执行所需的操作,而且外部命令的效果很容易因系统而异。
所以,不要使用 which,改用以下方法之一:
command -v foo || { echo >&2 "I require foo but it's not installed. Aborting."; return 1; }
type foo || { echo >&2 "I require foo but it's not installed. Aborting."; return 1; }
或者在文件 /etc/profile 末尾追加如下代码:
which() {
type "$@" || { echo >&2 "I require $@ , but it's not installed. Aborting."; return 1;}
}
再重开 shell 窗口,即可替代系统原有的 which 命令。
参考:
相关阅读: