Bash 使用jenkins部署的sed shell

Bash 使用jenkins部署的sed shell,bash,shell,jenkins,sed,rc,Bash,Shell,Jenkins,Sed,Rc,我现在正在做一些事情,刚才我甚至想知道我正在做的事情是否可能 我想用SSH将jenkins连接到shell脚本,并使用git存储库中的rc文件中的变量。(Shell脚本和rc文件位于同一repo中) 我试过的都不管用,现在我开始怀疑这是否可能 这是我的本地脚本,但我在jenkins上得到了相同的输出 docker exec -it test-container bash 'sed -f <(printf "s/${DOMAIN}\.%s/www.&.${DOMAIN_SU

我现在正在做一些事情,刚才我甚至想知道我正在做的事情是否可能

我想用SSH将jenkins连接到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'
docker exec-it测试容器bash'sed-f/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:sed-f/var/www/foo/sed/new-2.txt:没有这样的文件或目录

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

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

$ bash "echo Hello"
bash: echo Hello: No such file or directory
这是因为预期的语法是
bash yourfile
。您传递的字符串不是有用的文件名,因此失败

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

$ bash -c "echo Hello"
Hello

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

那么这是否也适用于ssh?如果我用ssh替换docker命令,因为这就是我登录服务器的方式。但是,如果我不知道在哪里运行它,我不会得到与我相同的输出。变量(rc文件)中的任何参数都没有被考虑。请不要破坏堆栈溢出的帖子。虽然你问了这个问题,但现在它已成为百科全书的一部分。