如何检查命令是否存在于shell脚本中?
我正在编写我的第一个shell脚本。 在我的脚本中,我想检查某个命令是否存在,如果没有,请安装可执行文件。 我将如何检查该命令是否存在?
if #check that foobar command doesnt exist
then
#now install foobar
fi
一般来说,这取决于你的shell,但是如果你使用bash,zsh,ksh或sh(由破折号提供),下面的代码应该可以工作:
if ! type "$foobar_command_name" > /dev/null; then
# install foobar here
fi
对于真实的安装脚本,您可能想要确保在存在别名foobar
的情况下该type
不会成功返回。 在bash中你可以做这样的事情:
if ! foobar_loc="$(type -p "$foobar_command_name")" || [[ -z $foobar_loc ]]; then
# install foobar here
fi
尝试使用type
:
type foobar
例如:
$ type ls
ls is aliased to `ls --color=auto'
$ type foobar
-bash: type: foobar: not found
出于以下几个原因, which
适合:
1)默认的which
实现只支持显示所有选项的-a
选项,因此您必须找到替代版本来支持别名
2)类型会告诉你到底你在看什么(是一个bash函数还是一个别名或一个适当的二进制文件)。
3)类型不需要子进程
4)类型不能用二进制文件(例如,在Linux中,如果创建一个名为程序来掩盖which
出现在路径上的实际之前which
,东西击中了风扇type
,在另一方面,是建立一个shell [是的,下属无意中曾经这样做过]
从Bash脚本检查程序是否存在,可以很好地解决这个问题。 在任何shell脚本中,最好运行command -v $command_name
来测试是否可以运行$command_name
。 在bash中,你可以使用hash $command_name
,它也可以散列任何路径查找的结果,或者如果你只想查看二进制文件(不是函数等),则type -P $binary_name
。
上一篇: How to check if command exists in a shell script?
下一篇: Check if a package is installed and then install it if it's not