Linux 判断一个命令是否存在

在命令行时,我们常使用 which xxx 或者 whereis xxx 来判断某个命令是否存在。然而在编写 bash 时,应该避免使用 which 命令。

原因是 which 做为一个外部的工具,并不一定存在,在发行版之间也会有区别,有的系统的 which 命令不会设置有效的 exit status,存在一定的不确定性。

Bash 提供的内建命令如 hash、type、command 可以达到要求。例如:

$ 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; }

编写方法时,可以这么编写:

gnudate() {
    if hash gdate 2>/dev/null; then
        gdate "$@"
    else
        date "$@"
    fi
}

参考资料


Docker run命令 转载 | Docker常用命令