【问题标题】:How to to strip simple quotes from bash script如何从bash脚本中去除简单的引号
【发布时间】:2021-05-20 10:08:09
【问题描述】:

我正在尝试使用 shell 脚本通过 docker 映像运行 maven

在shell中运行docker时,我使用sed去掉单引号:

bash 脚本:

docker run $(echo "-e CUCUMBER_FILTER_TAGS=$CUCUMBER_FILTER_TAGS $RUN_ARGUMENT $INPUT_MAVEN_COMMAND $MAVEN_ARGUMENTS $AUTHENTICATION" | sed "s/'//g")

被翻译成

docker run -e 'CUCUMBER_FILTER_TAGS="@bidrag-person' and not '@ignored"' --rm -v /home/deployer/actions-bidrag-cucumber-backend/ws/bidrag-cucumber-backend/bidrag-cucumber-backend:/usr/src/mymaven -v /home/deployer/.m2:/root/.m2 -w /usr/src/mymaven maven:3.6.3-openjdk-15 mvn test -e -DUSERNAME=j104364 -DINTEGRATION_INPUT=json/integrationInput.json -DUSER_AUTH=*** -DTEST_AUTH=*** -DPIP_AUTH=***

如何删除 CUCUMBER_FILTER_TAGS 周围和内部的那些似乎不知从何而来的多余单引号?

我无法解决这个问题,正在寻求解决方案。此脚本 (https://github.com/navikt/bidrag-maven/blob/feature/filter.tags/cucumber-backend/cucumber.sh) 正在 GitHub 上的 cron 作业中运行(GitHub Actions,GitHub 工作流程的一部分)

其他变量(不是此脚本的输入)在 GitHub 工作流中设置为来自 GitHub 机密的环境变量

AUTHENTICATION="-DUSER_AUTH=$USER_AUTHENTICATION -DTEST_AUTH=$TEST_USER_AUTHENTICATION -DPIP_AUTH=$PIP_USER_AUTHENTICATION"

在 GitHub 工作流 yaml 文件中设置如下:

      - uses: navikt/bidrag-maven/cucumber-backend@v6
        with:
          maven_image: maven:3.6.3-openjdk-15
          username: j104364
        env:
          USER_AUTHENTICATION: ${{ secrets.USER_AUTHENTICATION }}
          TEST_USER_AUTHENTICATION: ${{ secrets.TEST_USER_AUTHENTICATION }}
          PIP_USER_AUTHENTICATION: ${{ secrets.PIP_USER_AUTHENTICATION }}

【问题讨论】:

  • 命令替换本身和其中的echo 命令都没有引入文字单引号。事实上,它们来自其他东西,大概反映了扩展整个docker 命令的逻辑结果。
  • 您要比较的是否是 set -x 输出并在其中看到单引号?

标签: bash docker shell github-actions


【解决方案1】:

您应该使用数组。

docker_options=( 
  -e "CUCUMBER_FILTER_TAGS=$CUCUMBER_FILTER_TAGS"
  "$RUN_ARGUMENT"
  "$INPUT_MAVEN_COMMAND"
  "$MAVEN_ARGUMENTS"
  "$AUTHENTICATION"
)

docker run "${docker_options[@]}"

【讨论】:

  • 这似乎是一个不错的解决方案,但它只会创建更多引号: docker run -e 'CUCUMBER_FILTER_TAGS="@bidrag-person 而不是 @ignored"' '--rm -v /home/ J104364/ws/bidrag-cucumber-backend:/usr/src/mymaven -v /home/J104364/.m2:/root/.m2 -w /usr/src/mymaven maven:3.6.3-openjdk-15 mvn'测试 '-e -DUSERNAME=j104364 -DINTEGRATION_INPUT=json/integrationInput.json ' '-DUSER_AUTH=*** -DTEST_AUTH=*** -DPIP_AUTH=***'
  • 您可能不应该首先包含引号,因为它们只是为了将值存储在常规变量中而添加的。
  • 我无法解决这个问题...如果有人想尝试一下:github.com/navikt/bidrag-maven/blob/feature/filter.tags/…
  • 用你如何设置其他变量来更新你的问题。
【解决方案2】:

虽然这些答案在某种程度上有效,但它们在我的用例中不起作用...我最近升级了使用这些脚本的服务器,并且我已经转向其他脚本语言...

结论: Bash 脚本编写既困难又费力……这两个建议都在起作用(在某种程度上),但没有达到预期的效果……

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2020-02-08
    • 1970-01-01
    • 2014-06-01
    • 2013-08-16
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多