Переменные окружения не устанавливаются при перенаправлении эха через конвейер в функции

Переменные окружения не устанавливаются при перенаправлении эха через конвейер в функции

Эта команда:

echo '18' | source meta-cmf-raspberrypi/setup-environment

Не устанавливайте переменные окружения, как это было сделано просто:

source meta-cmf-raspberrypi/setup-environment

С вводом "18".
Вопрос по ссылке:Переменные среды не устанавливаются при вызове моей функции в конвейере

Не решил мою проблему, потому что я пробовал:

echo '18' > >(source meta-cmf-raspberrypi/setup-environment)

Безуспешно. Как решить проблему?

решение1

В конвейере скрипт загружается в отдельную среду. Аналогично в примере подстановки процесса. Это означает, что переменные, заданные в скрипте, устанавливаются в дочерней среде для вызывающей оболочки. Изменения в дочерней среде никогда не могут распространяться в родительскую среду.

Эту проблему можно решить двумя способами, избежав размещения скрипта в отдельной среде.

Первый способ будет работать в оболочке, которая понимает «строки here»:

source meta-cmf-raspberrypi/setup-environment <<<18

Второй способ — использовать стандартный here-документ:

source meta-cmf-raspberrypi/setup-environment <<END_INPUT
18
END_INPUT

В обоих вариантах скрипт берется из текущей среды, а его входные данные перенаправляются из here-string/here-document.

Связанный контент