Как объявить новую переменную внутри блока оболочки в Groovy скрипте? - PullRequest
0 голосов
/ 26 июня 2018

В жизни я не могу понять, как объявлять и использовать новые переменные внутри блока оболочки в отличном сценарии.

Например, этот блок оболочки -

sh """
    export earlist='abc.ear,def.ear'
    echo $earlist;
"""

выдает ошибку, говорящую

Нет такого свойства: earlist для класса: GroovyUserScript

Если я добавлю def earlist перед sh, то он выдаст сообщение об ошибке -

Нет подписи метода: GroovyUserScript.sh () применим для типы аргументов: (org.codehaus.groovy.runtime.GStringImpl) значения: [ список экспорта = 'abc.ear, def.ear' echo;

Может кто-нибудь помочь мне с тем, как объявить, а затем использовать переменную внутри блока оболочки, в groovy скрипте?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Посоветовавшись со старшими специалистами на своем рабочем месте, я нашел решение, которое искал.

Проблема с этим кодом -

sh """
    export earlist='abc.ear,def.ear'
    echo $earlist;
"""

заключается в том, что когда я говорю $ earlist, компилятор ищет переменную groovy с именем earlist и не находит ее. Поскольку в earlist есть переменная оболочки, мне нужно экранировать $. Итак, правильный код -

sh """
    earlist='abc.ear,def.ear'
    echo \$earlist;
"""

Bonus TIL - если я получаю доступ к переменной groovy внутри блока оболочки, доступ будет только для чтения. Я не могу редактировать значение переменной groovy, даже временно внутри блока оболочки. Если я хочу это сделать, я могу назначить переменную groovy переменной оболочки, манипулировать значением переменной оболочки, сохранить измененное значение в файле, а когда блок оболочки завершится, прочитать файл в исходную переменную groovy.

0 голосов
/ 27 июня 2018

Вместо этого используйте triple single quoted string, который не интерполирует переменные:

sh '''
    export earlist='abc.ear,def.ear'
    echo $earlist;
'''

См. Здесь документацию по triple single quoted strings: http://groovy -lang.org / syntax.html # _triple_single_quoted_string

Вот краткий обзор доступных типов строк в Groovy: http://groovy -lang.org / syntax.html # _string_summary_table

...