Jenkins Shell脚本:sed:-e表达式#1,字符54:未终止的`s'命令

时间:2019-11-29 12:56:57

标签: bash jenkins sed

  stage('adjust Dockerfile') {
    steps {
      script {
            TAG = sh(returnStdout: true, script: 'echo 123456')
            sh 'sed -i "s/name:TAG/name:\"${TAG}\"/g" Dockerfile'

      }
    }
  }

结果是在Jenkinsfile的sh命令中未替换变量Tag。

+ sed -i s/name:TAG/name:/g Dockerfile 

如果我更改为相同结果

            TAG = sh(returnStdout: true, script: 'echo 123456')
            sh 'sed -i "s/name:TAG/name:${TAG}/g" Dockerfile'

如果我这样更改引号

            TAG = sh(returnStdout: true, script: 'echo 123456')
            sh "sed -i 's/name:TAG/name:${TAG}/g' Dockerfile"

我用正确的值替换了变量TAG,但是sed出现了问题。

+ sed -i s/name:TAG/name:123456
/g Dockerfile
sed: -e expression #1, char 22: unterminated `s' command```

1 个答案:

答案 0 :(得分:0)

您应将echo 123456替换为printf 123456,因为echo在末尾添加尾随换行符(稍后会破坏sed命令),并且必须在sed命令中使用双引号为了在其中插入变量:

使用

TAG = sh(returnStdout: true, script: 'printf 123456')
sh 'sed -i "s/name:TAG/name:${TAG}/g" Dockerfile'