有没有办法防止envsubst
替代$VARIABLE
?例如,我希望有类似的东西:
export THIS=THAT
echo "dont substitute \\\$THIS" | envsubst
Run Code Online (Sandbox Code Playgroud)
并让它回来
dont substitute $THIS
Run Code Online (Sandbox Code Playgroud)
但我得到了
dont substitute \THAT
Run Code Online (Sandbox Code Playgroud)
这样做有什么逃避特征吗?
$$
无法在 GitLab CI 的环境变量中使用字符。
我将我的秘密存储在 GitLab CI 环境变量中,其中我的密码字符串之一末尾有 $$ 字符(例如:Ab1ab$$)。当我回显它或使用 envsubst 时,输出将为 Ab1ab$,去掉末尾多余的 $。
我尝试用 '',"" 将字符串包围起来,但没有任何帮助。在 gitlab 社区上看到了一些关于环境变量中 $ 字符使用的担忧,但找不到针对我的确切问题的任何解决方法。
https://gitlab.com/gitlab-org/gitlab-ce/issues/27436
导出 VAR= 'Ab1ab$$' 回显 $VAR=Ab1ab$
我正在尝试运行命令envsubst < myfile
来替换环境变量,但它们不是被它们的值替换,而是被替换为空白字符串。
这是我的示例命令(为了清楚起见,分成单独的行):
SIGNOFF="Goodbye"
&&
printf "\nOkay, \$SIGNOFF has been set to \"$SIGNOFF\"\n\nOriginal contents:\n\n"
&&
cat test.conf
&&
printf "\n\nContents after envsubst < test.conf\n\n"
&&
envsubst < test.conf | cat
&&
printf "\n\n"
Run Code Online (Sandbox Code Playgroud)
这是我的结果:
$ SIGNOFF="Goodbye" && printf "\nOkay, \$SIGNOFF has been set to \"$SIGNOFF\"\n\nOriginal contents:\n\n" && cat test.conf && printf "\n\nContents after envsubst < test.conf\n\n" && envsubst < test.conf | cat && printf "\n\n"
Okay, $SIGNOFF has been set to "Goodbye"
Original contents:
Hello world, let's …
Run Code Online (Sandbox Code Playgroud) 假设我们在一个文件夹中有许多 Kubernetes 配置文件kubernetes
,我们希望将它们全部应用:
kubectl apply -f kubernetes -n MyNamespace
Run Code Online (Sandbox Code Playgroud)
其中一些文件包含需要首先替换的环境变量(在 Kubernetes 中没有模板)。例如,一些部署 yaml 包含以下内容:
image: myregistry.com/myrepo:$TAG
Run Code Online (Sandbox Code Playgroud)
对于单个 yaml 文件,这可以通过使用 envsubst来完成,例如:
envsubst < deploy.yml | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
对所有 yaml 文件进行这些替换的最佳方法是什么?
(循环文件夹中的文件并按envsubst
上述方式调用是一种选择,但我怀疑最好将整个文件夹传递给kubectl
而不是单个文件)
是否可以像在 C++ 中那样在bash 脚本中通过引用来使用变量?
假设我有一个如下所示的脚本:
#!/bin/bash
A="say"
B=$A
echo "B is $B"
A="say it"
echo "B is $B" # This does not get the new value of A but is it possible to using some trick?
Run Code Online (Sandbox Code Playgroud)
即使 的值已从 更改为,您也会在上面的脚本echo "B is $B
输出中看到。我知道重新分配喜欢会解决它。但我想知道是否有可能持有对的引用,以便在更新后立即更新它的值。这发生在没有重新分配的情况下。这可能吗?B is say
A
say
say it
B=$A
B
A
B
A
B=$A
我envsubst
从Bash 中的 Lazy Evaluation 中读到了。是按照方法去做吗?
A="say"
B=$A
echo "B is $B"
envsubst A="say it"
echo …
Run Code Online (Sandbox Code Playgroud)