只是想将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
不幸的是,输出不会保存在变量..
你的脚本有两个问题…
- 你所描述的问题是因为这是一个错误的消息,你试图捕捉,但你只捕获正常的按摩。Bash和其他shell使用stdinstdout和stderr用于消息传递。使用您的命令,变量将只捕获stdout。
- 2 = stderr
- 1 = stdout
- 0 = stdin
- ,=表示将这个添加到那个
- & lt;比;
应该更像…
foo=$(ANY COMMAND 2>&1)
- 当您运行脚本时,它将首先创建该变量,然后循环将是无止境的,因为没有对该变量进行更改。相反,你可以去掉这个变量,把它放到循环中。
while [ "$(kubectl get all -n mattermost 2>&1)" = "No resources found in mattermost namespace." ]; do
echo "Hello World"
done
这样,当stderr时,循环将停止。或stdout将改变。也有可能用break
停止循环或用return
或exit
停止脚本(取决于您将如何运行该脚本)。
对于"没有找到资源...."这样的消息,它正在错误地打印。要纠正这个问题,可以将行修改为
foo=$(kubectl get all -n mattermost 2>&1)