之前我一直是在用 which 来判断 linux 命令是否存在的,但是它并不能用来检查内置命令和函数是否存在。

command_exists() {    which  "$@" > /dev/null 2>&1}command_exists lsecho "检查外部命令:" $?function t (){    echo "I am a function"}command_exists techo "检查函数:" $?command_exists cdecho "检查内置命令:" $?command_exists sldjecho "检查没有的命令:" $?
检查外部命令: 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 lsecho "检查外部命令:" $?function t (){    echo "I am a function"}command_exists techo "检查函数:" $?command_exists cdecho "检查内置命令:" $?command_exists sldjecho "检查没有的命令:" $?
检查外部命令: 0检查函数: 0检查内置命令: 0检查没有的命令: 1

这确实比用 which 要更好用。

举报/反馈

文江博客

2155获赞 799粉丝
文江的个人博客,平凡的草根站长。
关注
0
0
收藏
分享