[SHELL]判断一个命令是否存在
2014-05-27 15:34
651 查看
首先要说明的是,不要使用which来进行判断,理由如下:
1、which非SHELL的内置命令,用起来比内置命令的开销大,并且非内置命令会依赖平台的实现,不同平台的实现可能不同。
2、很多系统的which并不设置退出时的返回值,即使要查找的命令不存在,which也返回0
3、许多系统的which实现,都偷偷摸摸干了一些“不足为外人道也”的事情
所以,不要用which,可以使用下面的方法:
犀利的原文,可以在这里查看:
http://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-script/677212#677212
1、which非SHELL的内置命令,用起来比内置命令的开销大,并且非内置命令会依赖平台的实现,不同平台的实现可能不同。
# type type type is a shell builtin # type command command is a shell builtin # type which which is hashed (/usr/bin/which)
2、很多系统的which并不设置退出时的返回值,即使要查找的命令不存在,which也返回0
# which ls /usr/bin/ls # echo $? 0 # which aaa no aaa in /usr/bin /bin /usr/sbin /sbin /usr/local/bin /usr/local/bin /usr/local/sbin /usr/ccs/bin /usr/openwin/bin /usr/dt/bin # echo $? 0
3、许多系统的which实现,都偷偷摸摸干了一些“不足为外人道也”的事情
所以,不要用which,可以使用下面的方法:
$ 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; }
犀利的原文,可以在这里查看:
http://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-script/677212#677212
相关文章推荐
- 输入一个文件路径判断是否存在,并统计文件的行数(不用wc命令统计)
- 提示用户通过键盘输入一个用户名,来判断这个用户是否存在,如果存在就显示一下用户默认的shell
- shell脚本中判断上一个命令是否执行成功
- 如何在shell脚本中,判断一个基本命令执行是否成功?
- shell:判断一个进程是否存在
- shell 中如何判断前一个命令是否执行成功
- shell中如何判断某一命令是否存在
- shell中判断前一个命令是否执行成功
- shell:判断一个进程是否存在
- 如何在shell脚本中,判断一个基本命令执行是否成功?
- 一个判断进程是否存在的shell
- shell 中如何判断前一个命令是否执行成功
- 提示用户输入一个用户名,判断是否存在,如果存在显示该用户的shell
- linux下c调用shell命令,以及判断文件是否存在
- shell-判断一个目录是否存在,不存在是否创建
- shell 中如何判断前一个命令是否执行成功
- shell判断一个进程是否存在,如果不存在重启该进程
- shell中判断前一个命令是否执行成功
- 【shell】判断一个文件或者目录是否存在
- VB Excel 增加一个新sheet 的时候,怎么判断是否存在