【问题标题】:String with spaces not accepted in a manual job variables setting手动作业变量设置中不接受带空格的字符串
【发布时间】:2021-04-13 07:45:04
【问题描述】:

我在 GitLab CI/CD 中开发了一个管道。我的管道的最后一项工作是手动工作,我需要在工作表中输入一些信息。

这是一个例子:

我的问题是当我输入“我的密钥描述”之类的字符串时。使用此键/值开始工作后,我只能恢复“the”(这是我的键的第一个单词)。

我不明白为什么我无法恢复我所有的字符串。

重要的事情:我的工作开始一个 .sh 脚本

my job:
  script:
    - sh my_script.sh KEY=$key
  when: manual

   ...

在这个脚本中,我“回显”我的变量键,我只得到“the”而不是“我的键的描述”

我是如何使用 my_script.sh 中的键值的?


for var in "$@"; do
  eval "${var}"
done


# I only get key="the" instead of key="the description of my key"

【问题讨论】:

  • 如果我输入我的值,如“the_description_of_my_key”,它会起作用。但我不想要'_'。人物。空格是问题的根源。
  • "cat" 不执行任何脚本。它只显示脚本。此外,如果您在脚本中运行“导出”,您将看到您输入的完整密钥(带空格)
  • 是的。在我的代码中,我通过 ssh 执行它,这就是我复制它时出错的原因 ^^' 我已经导出了变量,例如: export KEY="$key" echo "$KEY" 但它根本不起作用
  • 你可能有一个错误的 gitlab 版本。我们公司有版本 13.9.3(企业版),它正在使用我们的版本
  • 对于 gitlab 版本仍然不适合我 -> 13.10.3(企业版)

标签: bash gitlab-ci


【解决方案1】:

变量$key已经正确传递给gitlab,当你尝试把这个变量传递给bash脚本时遇到问题。

- sh my_script.sh KEY=$key

为了将完整的值传递给 bash 脚本,您需要引用它。 当 bash 扩展变量时,它会遇到空格,这些空格被视为特殊的分隔符。所以为了实现你想要的改变上面的行到这个

- sh my_script.sh KEY="$key"

【讨论】:

  • 请对您的回答进行详细解释,以便下一位用户更好地理解您的回答。
  • 我会尽快尝试 :) 感谢您的回答
【解决方案2】:

我找到了解决方案,我使用“declare”而不是“eval”

for var in "$@"; do
  declare "${var}"
done

# key="the description of my key"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 2015-07-02
    • 2013-10-21
    • 2021-07-26
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多