带有 jenkins 部署的 sed shell

问题描述

我目前正在做一些事情,而现在我什至怀疑我正在做的事情是否可行。

我想从 jenkins SSH 到 shell 脚本并使用变量形成 git 存储库中的 rc 文件。 (Shell 脚本和 rc 文件在同一个 repo 中)

我尝试过的一切都没有奏效,现在我开始怀疑这是否可行。

这是我的本地脚本,但我在 jenkins 上得到了相同的输出

docker exec -it test-container bash 'sed -f <(printf "s/${DOMAIN}\.%s/www.&.${DOMAIN_SUFFIX_STAGE}/g\n" ${LANG_KEYS}) /var/www/foo/sed/test.txt > /var/www/foo/sed/new-2.txt'

无论我做什么我都会收到这个错误

bash: sed -f <(printf "s/${DOMAIN}\.%s/www.&.${DOMAIN_SUFFIX_STAGE}/g\n" ${LANG_KEYS}) /var/www/foo/sed/test.txt > /var/www/foo/sed/new-2.txt: No such file or directory

是的,我可以确认目录在那里

解决方法

这里有一个更简单的方法来重现您的问题:

$ bash "echo Hello"
bash: echo Hello: No such file or directory

发生这种情况是因为预期的语法是 bash yourfile。您传递的字符串不是有用的文件名,因此失败。

要将字符串参数作为命令运行,您可以使用 bash -c commandstring

$ bash -c "echo Hello"
Hello

这使得 bash 将参数解释为要执行的 shell 命令,而不是要打开的文件名。