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

时间:2019-06-13 14:59:21

标签: 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之后的双引号。我该怎么做? 我尝试使用正斜杠,但这没用。

欢呼声

3 个答案:

答案 0 :(得分:1)

经过长时间的努力和谷歌搜索,这对我来说在类似的用例上是有效的:

sh("ssh root@my.server.com \"su user -c \\\"mkdir ${newDirName}\\\"\"")

答案 1 :(得分:0)

为了进一步说明我的观点,进行了一次快速测试,证实了这种情况。

您需要转义两次,一次是用斜杠将外壳引号括起来,然后是一条斜线以表示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

答案 2 :(得分:0)

我在变量中有双引号,所以转义的单引号对我有用:

sh "git commit -m \'${ThatMayContainDoubleQuotes}\'"