gpt4 book ai didi

bash - gitlab-ci:具有变量扩展的远程 shell 执行

转载 作者:行者123 更新时间:2023-12-02 20:35:24 28 4
gpt4 key购买 nike

在 gitlab-ci 作业中,我想使用作业 ID 创建一个目录(在远程服务器上),并或多或少地执行一些操作,如下所示:

- ssh user@server mkdir -p /user/$CI_JOB_ID
- ssh user@server <perform_some_action_that_creates_several_zip_files>
- LAST_MODIFIED_FILE=$(ssh user@server bash -c 'find /user/$CI_JOB_ID -iname "*.zip" | tail -n 1 | xargs readlink -f')

目录确实被创建,并且创建多个 zip 的操作也成功了。

但是,我用于获取上次修改/创建的最后一个命令 .zip不起作用,因为 $CI_JOB_ID似乎没有得到扩展。

有什么建议吗?

最佳答案

此问题是由于您的 ssh 调用造成的。您现在的做法是混合上下文:

ssh user@server bash -c 'find /user/$CI_JOB_ID -iname "*.zip" | tail -n 1 | xargs readlink -f'
  • bash -c 'my_commands' :您使用简单的引号,因此 ssh 将完全执行指令 my_commands 。在您的情况下,它将尝试查找 $CI_JOB_IDremote 值。 ,而不是使用本地的。

  • ssh user@server bash -c "my_commands" :与 ssh ,在远程 shell 上执行的命令作为单个字符串发送。因此,如果您要使用此引用运行 ssh,它将尝试运行 "bash -c find ... | tail ... | xargs ..." 。这里,只有find贯穿bash -c .

就您而言,只需直接编写以下语句即可解决问题:

ssh user@server "find /user/$CI_JOB_ID -iname '*.zip' | tail -n 1 | xargs readlink -f"

否则,如果您想继续使用 bash -c语法,您必须转义引号,以便将其传播到远程计算机:

ssh user@server bash -c \"find /user/$CI_JOB_ID -iname '*.zip' | tail -n 1 | xargs readlink -f\"

关于bash - gitlab-ci:具有变量扩展的远程 shell 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47307061/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com