Ale*_* oh 2 bash kubernetes kubectl
我在一个名为pod的pod中有一个脚本script01
,它可以接受参数。我通过以下命令运行脚本:
POD=<pod name>
runScript="kubectl -n nmspc exec $POD -- script01"
$runScript --command "do stuff"
Run Code Online (Sandbox Code Playgroud)
我以这种方式运行它的原因是,我无权在本地计算机上创建脚本,但可以访问Pod上的脚本。
问题是我想将主机的IP传递给Pod,并希望使用环境变量来完成。我尝试使用bash -c传递参数,但是通过变量调用脚本时,它不会附加参数。
runScript="kubectl -n nmspc exec $POD -- bash -c \"export curIP=123 && script01\""
Run Code Online (Sandbox Code Playgroud)
但是如果我用
$runScript --command "do stuff"
如何将环境变量传递到Pod,但仍然可以通过该变量调用脚本?
/usr/bin/env
key=value
将成对传递的值导出到它用来调用的任何程序的环境中。
kubectl -n nmspc exec "$POD" -- env curIP=123 script01
Run Code Online (Sandbox Code Playgroud)
请注意,切勿使用$runScript
或任何其他未引用的扩展名来调用Shell命令。见BashFAQ#50 - 我想在一个变量把一个命令,但是复杂的情况下总是失败!
至于你如何一个例子可以保持bash -c
在地方,但有你的指挥工作,可以考虑:
runScript() {
kubectl -n nmspc exec "$POD" -- bash -c 'export curIP=123 && script01 "$@"' _ "$@"
}
runScript --command "do stuff"
Run Code Online (Sandbox Code Playgroud)
这里runScript
是一个函数,而不是字符串变量,它显式地将整个参数列表传递给kubectl
。同样,bash
start by 的副本kubectl
将其参数列表(在$0
占位符之后_
)显式传递到script01
,因此最终结果是您的参数将其传递到最终程序。
归档时间: |
|
查看次数: |
548 次 |
最近记录: |