Оболочка Jenkins для чтения текста из файла с переменными - PullRequest
0 голосов
/ 02 июля 2018

Я реализую работу Дженкинса в сценарии оболочки bash. В заданиях Jenkins используется переменная AS_OF_DATE, которую можно использовать как ввод для пользователей.

У меня также есть несколько файлов в зоне с текстом, который я добавляю в текст при выполнении этого задания Дженкинса.

Таким образом, пользователь запустит задания и даст следующие параметры: AS_OF_DATE: "20180331"

Затем во время работы я извлекаю текст из файла test.txt.

TEXT_FROM_FILE="This is my text, where i used ${AS_OF_DATE}"

И когда я повторяю эхо $TEXT_FROM_FILE, переменная $AS_OF_DATE не изменяется с датой, которую добавил пользователь.

Мой результат:

"This is my text, where i used ${AS_OF_DATE}"

Что должно быть:

"This is my text, where i used 20180331"

Я полагаю, что я не объявляю переменную внутри файла правильно, поэтому мой вопрос состоит в том, чтобы правильно указать переменную в файле, которая будет фактически использовать значение, которое имеет переменная, вместо простого вывода текста.

Заранее спасибо.

1 Ответ

0 голосов
/ 02 июля 2018

Это никак не связано с тем, как вы объявляете переменную в файле. Наличие имени переменной в текстовой строке не расширяет это имя до его значения, если вы не выполняете над ним операцию раскрытия. Например, вы можете source файл, если он содержит исполняемые команды bash, но простое чтение их как текста ничего не даст.

Есть несколько решений. Один включает использование eval, что я не рекомендую, поскольку может быть введена другая команда (например, rm *) и eval выполнит ее. Кроме того, если бы я это предложил, меня бы (совершенно правильно) понизили как сумасшедшего.

Безопаснее было бы сделать простую замену:

AS_OF_DATE="20180331"

# I use single quotes to prevent expansion here
TEXT_FROM_FILE='This is my text, where i used ${AS_OF_DATE}'

final_text=${TEXT_FROM_FILE/'${AS_OF_DATE}'/$AS_OF_DATE}
echo "$final_text"

Дает:

This is my text, where i used 20180331

Если вы выполните эту подстановку, а имя переменной отсутствует в тексте, то она просто скопирует существующую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...