之前我一直是在用 which 来判断 linux 命令是否存在的,但是它并不能用来检查内置命令和函数是否存在。
command_exists() {
which "$@" > /dev/null 2>&1
}
command_exists ls
echo "检查外部命令:" $?
function t ()
{
echo "I am a function"
}
command_exists t
echo "检查函数:" $?
command_exists cd
echo "检查内置命令:" $?
command_exists sldj
echo "检查没有的命令:" $?
检查外部命令: 0
检查函数: 1
检查内置命令: 1
检查没有的命令: 1
直到今天看了下 daocloud 提供的配置 docker 加速器脚本(https://get.daocloud.io/daotools/set_mirror.sh)。
这个脚本里面也实现了一个 command_exists 函数,不过是使用bash内建的 command 命令来实现的。
command_exists() {
command -v "$@" > /dev/null 2>&1
}
使用 command -v 检查命令时,当命令是已定义的函数,内建命令或者 PATH 中能找到的外部命令时都,返回值都是0,否则会返回1。
command_exists() {
command -v "$@" > /dev/null 2>&1
}
command_exists ls
echo "检查外部命令:" $?
function t ()
{
echo "I am a function"
}
command_exists t
echo "检查函数:" $?
command_exists cd
echo "检查内置命令:" $?
command_exists sldj
echo "检查没有的命令:" $?
检查外部命令: 0
检查函数: 0
检查内置命令: 0
检查没有的命令: 1
这确实比用 which 要更好用。

