【问题标题】:sed shell with jenkins deploymentsed shell 与 jenkins 部署
【发布时间】:2021-02-01 21:50:52
【问题描述】:

我现在正在做一些事情,而现在我什至想知道我正在做的事情是否可能。

我想从 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

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

【问题讨论】:

  • 请不要破坏 Stack Overflow 上的帖子。尽管您提出了这个问题,但它现在已被视为百科全书的一部分。

标签: bash shell jenkins sed rc


【解决方案1】:

这是重现问题的更简单方法:

$ 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 命令,因为这就是我登录服务器的方式。
  • 所以 -c 确实让我用 bash 运行命令。但是如果我没有在哪里运行它,我不会得到相同的输出。变量(rc文件)中的任何参数都没有被考虑。
猜你喜欢
  • 1970-01-01
  • 2018-12-25
  • 2018-11-21
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 2019-07-28
  • 2014-08-07
相关资源
最近更新 更多