我需要通过bash脚本检查是否安装了kubernetes。如果不是,我开始我的设置程序。我认为最好检查是否kubectl cluster-info
有输出。如何检查失败的命令?
if command kubectl cluster-info > /dev/null; then
# sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
# ...
fi
在sh
兼容的 shell 中,不存在的命令的退出状态应该是127
.
如果未找到命令,则退出状态应为
127
。如果找到命令名称,但它不是可执行实用程序,则退出状态应为126
。
(来源)
该command
内建没有太大变化:
[…] 应返回以下退出值:
126
已找到指定的实用程序 [...],但无法调用。
127
命令实用程序中发生错误或找不到指定的实用程序 [...]。
(来源)
您的示例已修改:
command kubectl cluster-info >/dev/null 2>&1
if [ "$?" -eq 127 ]; then …
还有type
。
该
type
工具应说明如何如果用作一个命令名每个参数会被解释。
(来源)
POSIX 没有指定输出的确切格式。退出状态仅用于区分错误和成功。目前尚不清楚是否成功找到提供的命令不存在。
但是在 Bash中毫无疑问:
如果找到所有名称,则返回状态为零,如果找不到任何名称,则返回状态为非零。
有一些有用的选项:
如果
-t
使用选项,type
打印单个字是一个alias
,function
,builtin
,file
或keyword
,如果名字是别名,壳的功能,外壳内置,磁盘文件,或壳保留字,分别。如果未找到名称,则不打印任何内容,并type
返回失败状态。如果使用该
-p
选项,则 type 要么返回将被执行的磁盘文件的名称,要么-t
不返回任何内容file
。
通过检查type -t kubectl
和/或的输出和退出状态type -p kubectl
,您可以在kubectl
不调用它的情况下讲述一些事情。
不过,事先说查不到kubectl
,作为一个命令一起使用时,会被解释为一个文件运行并不意味着它是在 kubectl
你需要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句