我试着检查Kubernetes集群名称空间是否存在,如果不存在,我会处理这种情况。我用set -euo pipefail初始化我的bash脚本,以便处理错误。
上下文是我需要在my_ns不存在时实现脚本。
我将kubectl get ns my_ns命令的输出(因为它返回错误消息)存储到一个bash变量中,但脚本退出:
问题是我不明白为什么当我使用环境变量与导出命令时它工作:
我将kubectl get ns my_ns命令的输出存储到一个bash变量中:
checknsoutput=$(kubectl get ns my_ns 2>&1)
我试过导出,效果很好
export checknsoutput=$(kubectl get ns my_ns 2>&1)
我启用了“调试”模式,这要归功于以下命令,以便具有更详细的内容:
set -x
下面是使用export命令的脚本的日志片段:
++ kubectl get ns toto
+ export 'checknsoutput=Error from server (NotFound): namespaces "toto" not found'
+ checknsoutput='Error from server (NotFound): namespaces "toto" not found'
+ echo 'RESULLT: Error from server (NotFound): namespaces "toto" not found'
下面是脚本日志的片段,其中包含一个基本变量:
++ kubectl get ns toto
+ checknsoutput='Error from server (NotFound): namespaces "toto" not found'
如果我正确理解了 kubectl get ns my_ns 返回的1,它会被脚本捕获,并在初始化值 checknsoutput 之前存在。
我希望能理解为什么它不能与变量一起工作,而与导出变量一起工作。提前感谢您的帮助
1条答案
按热度按时间btxsgosb1#
export
是一个有退出代码的命令。通常它会退出0,除非你告诉它导出一个无效的shell变量,所以它会屏蔽命令替换的退出代码,防止set -e
中止脚本。如果您 * 希望 * 脚本在命令失败时退出,则需要分别执行分配和导出步骤。
第27章.