【问题标题】:How can I place a CodeBuild envrionment variable inside a command parameter?如何将 CodeBuild 环境变量放在命令参数中?
【发布时间】:2020-10-07 22:29:30
【问题描述】:

我的 CodeBuild 环境有一个环境变量 DiscordWebhook。这包含作为纯文本的 URL。我正在尝试运行sed 命令,如下所示。这是在BuildSpec.yml 文件中指定的。

sed -i 's/discordWebhookAddressLocal/${DiscordWebhook}/g' scripts.js

显然,这只是将所有discordWebhookAddressLocal 实例替换为“${DiscordWebhook}”。我尝试了其他一些方法,例如使用alias 命令,但是当我尝试执行别名时,CodeBuild 失败,提示找不到该命令。

如何在命令中指定环境变量?

【问题讨论】:

    标签: linux amazon-web-services aws-codebuild


    【解决方案1】:

    这可能是因为您使用了单引号。通常你会使用双引号来解析变量:

    sed -i "s/discordWebhookAddressLocal/${DiscordWebhook}/g" scripts.js
    

    【讨论】:

    • CodeBuild 运行此命令时失败并出现以下错误:sed: -e expression #1, char 38: unknown option to s'`
    • @AugustWilliams 来自here 似乎您在某处有额外的斜线。也许在DiscordWebhook 变量中?
    • 是的,DiscordWebhook 地址中有多个正斜杠,它是一个 URL 端点。我需要逃脱它们吗?
    • @AugustWilliams 检查我提供的链接。他们给出了一些如何处理它的想法。我很难提供更多细节。但至少 ${DiscordWebhook} 现在解决了您最初报告的问题。
    【解决方案2】:

    事实证明,在我的案例中存在两个不同的问题。

    首先,正如 Marcin 所指出的 - 在使用变量时应该使用双引号而不是单引号。其次,有问题的环境变量是一个 URL,其中包含 \ 字符。这与 sed 命令中用作分隔符的字符相同。为了解决这个问题,我更改了sed 命令中使用的分隔符。

    新的、完整的工作命令如下所示:

    sed -i "s|discordWebhookAddressLocal|${DiscordWebhook}|g" scripts.js
    

    commnad 现在完全不返回任何错误,并按预期替换 scripts.js 内的字符串。

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 2020-04-26
      • 2019-03-13
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      相关资源
      最近更新 更多