kubectl exec 输出未存储在变量中
kubectl exec output not getting stored in variable
我正在尝试执行 kubectl exec 并将值存储到变量中。但是变量显示为空。如果我在 exec 中使用 -it,它就可以工作。因为虽然 运行 terraform 说不能分配终端,我需要 运行 它没有 -it。
命令一运行:abc=$(kubectl exec nginx-6799fc88d8-xpzs9 -- nginx -v)
您需要修改您的命令如下(-it
):
abc=$(kubectl exec -it nginx-6799fc88d8-xpzs9 -- nginx -v)
此行为的原因是 nginx -v
在 stderr
而不是 stdout
上显示输出。这意味着,您使用的命令适用于任何其他命令,例如 ls
、 cat
等,它们在 stdout
.
上显示输出
替代方法 通过将 stderr 重定向到 stdout(2>&1
) :
abc=$(kubectl exec nginx-6799fc88d8-xpzs9 -- nginx -v 2>&1)
示例:
x=$(k exec nginx -- nginx -v 2>&1)
echo "$x"
nginx version: nginx/1.21.3
作为@P....提到的替换-it的替代方法是使用2>&1
- 文件描述符1是标准输出(stdout)。
- 文件描述符2是标准错误(stderr)。
- -i 将标准输入传递给容器(标准输入)
- -t 标准输入是一个 TTY(tty)
这是记住此结构的一种方法:起初,2>1 可能看起来是将 stderr 重定向到 stdout 的好方法。但是,它实际上会被解释为“将 stderr 重定向到名为 1 的文件”。 & 表示后面和前面的是文件描述符而不是文件名。所以结构变成:2>&1.
将 >& 视为重定向合并运算符。
有关更多详细信息,请参阅此 document on kubectl exec 命令。
我正在尝试执行 kubectl exec 并将值存储到变量中。但是变量显示为空。如果我在 exec 中使用 -it,它就可以工作。因为虽然 运行 terraform 说不能分配终端,我需要 运行 它没有 -it。
命令一运行:abc=$(kubectl exec nginx-6799fc88d8-xpzs9 -- nginx -v)
您需要修改您的命令如下(-it
):
abc=$(kubectl exec -it nginx-6799fc88d8-xpzs9 -- nginx -v)
此行为的原因是 nginx -v
在 stderr
而不是 stdout
上显示输出。这意味着,您使用的命令适用于任何其他命令,例如 ls
、 cat
等,它们在 stdout
.
替代方法 通过将 stderr 重定向到 stdout(2>&1
) :
abc=$(kubectl exec nginx-6799fc88d8-xpzs9 -- nginx -v 2>&1)
示例:
x=$(k exec nginx -- nginx -v 2>&1)
echo "$x"
nginx version: nginx/1.21.3
作为@P....提到的替换-it的替代方法是使用2>&1
- 文件描述符1是标准输出(stdout)。
- 文件描述符2是标准错误(stderr)。
- -i 将标准输入传递给容器(标准输入)
- -t 标准输入是一个 TTY(tty)
这是记住此结构的一种方法:起初,2>1 可能看起来是将 stderr 重定向到 stdout 的好方法。但是,它实际上会被解释为“将 stderr 重定向到名为 1 的文件”。 & 表示后面和前面的是文件描述符而不是文件名。所以结构变成:2>&1.
将 >& 视为重定向合并运算符。
有关更多详细信息,请参阅此 document on kubectl exec 命令。