在Bashscript中将kubectl命令输出保存为变量



只是想将kubectl命令的输出保存在Bash脚本的一个变量中。

例如:命令kubectl get all -n mattermost输出No resources found in mattermost namespace.

foo=$(kubectl get all -n mattermost)
while [ "$foo" = "No resources found in mattermost namespace." ]
do
echo "yay"
done

不幸的是,输出不会保存在变量..

你的脚本有两个问题…

  1. 你所描述的问题是因为这是一个错误的消息,你试图捕捉,但你只捕获正常的按摩。Bash和其他shell使用stdinstdoutstderr用于消息传递。使用您的命令,变量将只捕获stdout
  • 2 = stderr
  • 1 = stdout
  • 0 = stdin
  • ,=表示将这个添加到那个
  • & lt;比;

应该更像…

foo=$(ANY COMMAND 2>&1)
  1. 当您运行脚本时,它将首先创建该变量,然后循环将是无止境的,因为没有对该变量进行更改。相反,你可以去掉这个变量,把它放到循环中。
while [ "$(kubectl get all -n mattermost 2>&1)" = "No resources found in mattermost namespace." ]; do
echo "Hello World"
done
这样,当stderr时,循环将停止。stdout将改变。也有可能用break停止循环或用returnexit停止脚本(取决于您将如何运行该脚本)。

对于"没有找到资源...."这样的消息,它正在错误地打印。要纠正这个问题,可以将行修改为

foo=$(kubectl get all -n mattermost 2>&1)