groovy + shell: убегающие персонажи - PullRequest
0 голосов
/ 06 сентября 2018

Я использую Jenkins Pipeline, используя Groovy sandbox. И я пытаюсь запустить скрипт оболочки в отличной функции sh.

Оригинальный сценарий оболочки

sed -i 's/sometext/'"${othertext}"'/' filename

Я пытаюсь заменить определенный текст другим текстом (взятым динамически). Сценарий отлично работает, когда выполняется напрямую. Но я хочу использовать его в функции jenkins groovy sh.

sh(script: '<above shell script>',  returnStdout:false)

Но есть проблема побега персонажей. Я пробовал этот способ избежать персонажа

sh (script: '''sed -i 's/sometext/othertext/' filename''', returnStdout:false)

Работает нормально, но othertext не берется динамически. Может ли кто-нибудь помочь мне в экранировании персонажей с помощью оригинального сценария? Или, пожалуйста, предложите другой способ сделать это.

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

С вводами от Даггетт и Мкобит и я провел несколько экспериментов, следующий скрипт работал хорошо

def l_othertext = sh(script: 'echo ${othertext}', returnStdout: true).trim()
print('l_othertext='+l_othertext)
sh "sed -i 's/sometext/'${l_othertext}'/' filename"
0 голосов
/ 07 сентября 2018
node{
   sh 'sed -i 's/sometext/'"${othertext}"'/' filename'
}
0 голосов
/ 06 сентября 2018

, если othertext - переменная типа groovy, это должно работать:

def othertext = 'newtext'
sh (script: """sed -i 's/sometext/${othertext}/' filename""", returnStdout:false)
...