如果安装了 kubernetes,我需要通过 bash 脚本检查。如果不是,我开始我的设置程序。我认为最好检查是否kubectl cluster-info有输出。如何检查失败的命令?
if command kubectl cluster-info > /dev/null; then
# sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
# ...
fi
Run Code Online (Sandbox Code Playgroud)
在sh兼容的 shell 中,不存在的命令的退出状态应该是127.
如果未找到命令,则退出状态应为
127。如果找到命令名称,但它不是可执行实用程序,则退出状态应为126。
(来源)
该command内建没有太大变化:
[…] 应返回以下退出值:
126
已找到指定的实用程序 [...],但无法调用。
127
命令实用程序中发生错误或找不到指定的实用程序 [...]。
(来源)
您的示例已修改:
command kubectl cluster-info >/dev/null 2>&1
if [ "$?" -eq 127 ]; then …
Run Code Online (Sandbox Code Playgroud)
还有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你需要的。