检查linux命令是否存在的正确方式
之前我一直是在用 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
要更好用.