envsubst не работает должным образом в цикле bash for - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь использовать bash envsubst для подстановки переменной окружения в файл. Вот простой пример, который не работает должным образом:

Создайте файл с подстановкой переменных в нем:

echo 'Filename: ${FILE}' > test.txt

Теперь попробуйте использовать envsubst в цикле for:

for FILE in `ls`; do envsubst < test.txt; done

Filename:

В результате просто Filename: замена не удалась.

Эхо работает, как и ожидалось, в этом контексте:

for FILE in `ls`; do echo Filename: ${FILE}; done

Filename: test.txt

Я не понимаю, почему эхо будет работать и envsubstпотерпит неудачу.

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Это потому, что в цикле for FILE является переменной оболочки и фактически не является частью среды, поэтому она не передается в среду envsubst.

Попробуйте это

for FILE in `ls`; do
    env | grep FILE;
done

и сравните его с этим

for FILE in `ls`; do
    export FILE;
    env | grep FILE;
done

Так что если вы хотите сделать FILE переменной среды, вам нужно использовать встроенную export ранее.

1 голос
/ 18 октября 2019

Обязательно экспортируйте переменную и, при необходимости, если вы параноик / настроены на безопасность, назовите ее в командной строке:

export FILE
envsubst < template #all exported environment avail in template
envsubst '${FILE}' < template #only FILE available
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...