将 kubectl 命令输出保存在 Bash 脚本中的变量中

Save kubectl command output in variable in Bashscript

只想将 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

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

对于“未找到资源...”之类的消息,它正在 stderr 中打印。要纠正此问题,您可以将行修改为

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

你的脚本有两个问题...

  1. 您描述的问题是因为它是您尝试捕获的错误消息,但您只捕获了正常的按摩。 Bash 和其他 Shell 使用 stdin stdoutstderr 用于消息传递。使用您的命令,变量将仅捕获 stdout
  • 2 = 标准错误
  • 1 = 标准输出
  • 0 = 标准输入
  • & = 表示有些人喜欢把这个加到那个
  • < > = stdxxx 去哪里

应该更像...

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

这样你的循环将在 stderrstdout 时停止 会改变。也可以使用 break 停止循环或使用 returnexit 停止脚本(取决于您如何 运行 该脚本)。