你能不用bash -c将环境变量传递给kubectl exec吗?

问题描述 投票:1回答:1

我在一个名为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但仍能通过变量调用脚本?

bash kubernetes kubectl
1个回答
7
投票

/usr/bin/envkey=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。同样,由bash开始的kubectl副本明确地将其参数列表(在$0占位符_之后)传递给script01,因此最终结果是您的参数通过最终程序。

© www.soinside.com 2019 - 2024. All rights reserved.