bash - 你可以在没有 bash -c 的情况下将环境变量传递给 kubectl exec 吗?
问题描述
我在一个名为 pod 的脚本中有一个脚本,script01
它可以接受参数。我通过以下方式运行脚本:
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
。同样,bash
started by的副本将其参数列表(在占位符之后)kubectl
显式传递给 to ,因此最终结果是您的参数将其传递给最终程序。$0
_
script01
推荐阅读
- sql - 过滤 SQL 中的重复值
- android - 如何左对齐 TabLayout 标题文本?
- python - 在 tweepy 中使用 Cursor 处理速率限制异常
- reactjs - 我想将状态从反应发送到 redux 钩子我是怎么做的
- c# - Ajax 可以访问非控制器方法吗?
- sql-server - 确定表是否可以被截断/删除、运行脚本和循环返回
- javascript - Promisify 基于事件的模式
- r - 基于变异中匹配正则表达式的条件str_replace?
- c# - 使用 LINQ 根据 ID 将 2 个不同类型的列表组合为 1 个
- amazon-web-services - 无法连接到使用自行创建的 AMI 创建的 AWS Windows 实例