你可以在没有 bash -c 的情况下将环境变量传递给 kubectl exec 吗?
Can you pass an environment variables into kubectl exec without bash -c?
我在名为 script01
的 pod 中有一个脚本,它可以接受参数。
我通过以下运行脚本:
POD=<pod name>
runScript="kubectl -n nmspc exec $POD -- script01"
$runScript --command "do stuff"
我 运行 这样做的原因是我无权在本地计算机上创建脚本,但我可以访问 pod 上的脚本。
问题是我想将主机的 IP 传递给 pod,并想使用环境变量来完成。我试过使用 bash -c 来传递参数,但是当通过变量调用脚本时,它不会附加参数。
runScript="kubectl -n nmspc exec $POD -- bash -c \"export curIP=123 && script01\""
但如果我 运行 它确实有效
$runScript --command "do stuff"
如何将环境变量传递给 pod,但仍然能够通过变量调用脚本?
/usr/bin/env
将 key=value
对中传递的值导出到它用来调用的任何程序的环境中。
kubectl -n nmspc exec "$POD" -- env curIP=123 script01
请注意,您应该永远不要 使用$runScript
或任何其他未加引号的扩展来调用shell 命令。请参阅 BashFAQ #50 -- 我正在尝试将命令放入变量中,但复杂的情况总是失败!
作为您如何可以保持bash -c
但命令起作用的示例,请考虑:
runScript() {
kubectl -n nmspc exec "$POD" -- bash -c 'export curIP=123 && script01 "$@"' _ "$@"
}
runScript --command "do stuff"
这里,runScript
是一个 函数 ,不是字符串变量,它显式地将其整个参数列表传递给 kubectl
。类似地,由 kubectl
启动的 bash
的副本显式地将 其 参数列表(在 [=20=]
占位符 _
之后)传递给 script01
,所以最终结果是你的论点进入你的最终程序。
只需使用 sh:
kubectl -n nmspc exec "$POD" -- /bin/sh -c 'curIP=123 script01'
我在名为 script01
的 pod 中有一个脚本,它可以接受参数。
我通过以下运行脚本:
POD=<pod name>
runScript="kubectl -n nmspc exec $POD -- script01"
$runScript --command "do stuff"
我 运行 这样做的原因是我无权在本地计算机上创建脚本,但我可以访问 pod 上的脚本。
问题是我想将主机的 IP 传递给 pod,并想使用环境变量来完成。我试过使用 bash -c 来传递参数,但是当通过变量调用脚本时,它不会附加参数。
runScript="kubectl -n nmspc exec $POD -- bash -c \"export curIP=123 && script01\""
但如果我 运行 它确实有效
$runScript --command "do stuff"
如何将环境变量传递给 pod,但仍然能够通过变量调用脚本?
/usr/bin/env
将 key=value
对中传递的值导出到它用来调用的任何程序的环境中。
kubectl -n nmspc exec "$POD" -- env curIP=123 script01
请注意,您应该永远不要 使用$runScript
或任何其他未加引号的扩展来调用shell 命令。请参阅 BashFAQ #50 -- 我正在尝试将命令放入变量中,但复杂的情况总是失败!
作为您如何可以保持bash -c
但命令起作用的示例,请考虑:
runScript() {
kubectl -n nmspc exec "$POD" -- bash -c 'export curIP=123 && script01 "$@"' _ "$@"
}
runScript --command "do stuff"
这里,runScript
是一个 函数 ,不是字符串变量,它显式地将其整个参数列表传递给 kubectl
。类似地,由 kubectl
启动的 bash
的副本显式地将 其 参数列表(在 [=20=]
占位符 _
之后)传递给 script01
,所以最终结果是你的论点进入你的最终程序。
只需使用 sh:
kubectl -n nmspc exec "$POD" -- /bin/sh -c 'curIP=123 script01'