Существует разница между переменной и переменной окружения. Если вы выполняете . foo.sh
и foo.sh
содержит строку FOO=value
, тогда переменная FOO
будет назначена в текущем процессе. Это не переменная среды. Чтобы стать переменной окружения (и, следовательно, быть доступной для суб-оболочек), она должна быть экспортирована. Однако оболочках вариант, который делает все переменные задания способствуют переменной в переменную окружения, так что если вы просто сделать:
set -a
. foo.sh
set +a
тогда все переменные задания в foo.sh будут переменные среды в текущем процессе. Обратите внимание, что это не совсем так: в bash экспорт переменной делает ее переменной environement в текущей оболочке, но в других оболочках (например, тире) экспорт переменной не делает ее переменной среды в текущей оболочке. (Это действительно причина его установить его в среде подоболочки, однако.)
Я создал еще один bar.sh скрипт, который имеет источник foo.sh во время чтения строки; do export "$ line" done
user2077092
Вам понадобится 'source bar.sh', а также повлиять на текущую среду. – chepner
Кроме того, цикл 'while' вместо' source foo.sh'; вам не нужны оба. Это не так, просто избыточно. – chepner