将 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)
你的脚本有两个问题...
- 您描述的问题是因为它是您尝试捕获的错误消息,但您只捕获了正常的按摩。 Bash 和其他 Shell 使用 stdin stdout 和 stderr 用于消息传递。使用您的命令,变量将仅捕获 stdout。
- 2 = 标准错误
- 1 = 标准输出
- 0 = 标准输入
- & = 表示有些人喜欢把这个加到那个
- < > = stdxxx 去哪里
应该更像...
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
停止脚本(取决于您如何 运行 该脚本)。
只想将 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)
你的脚本有两个问题...
- 您描述的问题是因为它是您尝试捕获的错误消息,但您只捕获了正常的按摩。 Bash 和其他 Shell 使用 stdin stdout 和 stderr 用于消息传递。使用您的命令,变量将仅捕获 stdout。
- 2 = 标准错误
- 1 = 标准输出
- 0 = 标准输入
- & = 表示有些人喜欢把这个加到那个
- < > = stdxxx 去哪里
应该更像...
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
停止脚本(取决于您如何 运行 该脚本)。