bash - 在Jenkins管道文件的shell命令中转义双引号

标签 bash jenkins groovy

以下是我的Jenkins文件中的摘录-

stage('Configure replication agents') {
            environment {
                AUTHOR_NAME="XX.XX.XX.XX" 
                PUBLISHER_NAME="XX.XX.XX.XX"
                REPL_USER="USER"
                REPL_PASSWORD="PASSWORD"
                AUTHOR_PORT="4502"
                PUBLISHER_PORT="4503"
                AUTHOR="http://${AUTHOR_NAME}:${AUTHOR_PORT}"
                PUBLISHER="http://${PUBLISHER_NAME}:${PUBLISHER_PORT}"
                S_URI= "${PUBLISHER}/bin/receive?sling:authRequestLogin=1"
            }
            steps {
                sh 'curl -u XX:XX --data "status=browser&cmd=createPage&label=${PUBLISHER_NAME}&title=${PUBLISHER_NAME}&parentPath =/etc/replication/agents.author&template=/libs/cq/replication/templates/agent" ${AUTHOR}/bin/wcmcommand'
            }

在Jenkins控制台中,以上命令显示为
curl -u XX:XX --data status=browser&cmd=createPage&label=XXXX&title=XXX&parentPath =/etc/replication/agents.author&template=/libs/cq/replication/templates/agent http://5XXXX:4502/bin/wcmcommand

请注意如何省略双引号""

我需要在此命令中保留--data后的双引号。我该怎么做?
我尝试使用正斜杠,但没有用。

干杯

最佳答案

为了扩展我的评论,快速测试揭示了这种情况。

您需要转义两次,一次是用斜杠将 shell 引号引起来,一次是将groovy本身用斜杠引起来。

node() {
    sh 'echo "asdf"'
    sh 'echo \"asdf\"'
    sh 'echo \\"asdf\\"'
}

结果
[Pipeline] {
[Pipeline] sh
+ echo asdf
asdf
[Pipeline] sh
+ echo asdf
asdf
[Pipeline] sh
+ echo "asdf"
"asdf"
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline

关于bash - 在Jenkins管道文件的shell命令中转义双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56583357/

相关文章:

linux - 在 Bash 中的 if 语句中 grep 2 个单词

bash - 如何在 bash 脚本中使用 HTTPie 捕获实际的响应代码和响应主体?

git - 如何在 Jenkins 电子邮件中包含 git changelog?

groovy - Gradle动态依赖

groovy - 如何在 Groovy 中创建和访问全局变量?

templates - 避免 groovy 模板中的新断线

linux - 仅使用 smbclient 获取文件夹

linux - 在 Kubuntu 设备上执行命令

jenkins - 在 Jenkins 的多分支管道中删除分支时执行代码

jenkins - 有没有办法防止 Jenkins 字符串参数默认为参数名称(如果为空)?