Ваш source
из подстановки процесса отлично работает для меня из командной строки:
$ cat foo.sh
PGUSER=usr
PGPASSWORD=pass
PGDATABASE=myDB
PGHOST=localhost
PGPORT=5432
$ source <(grep = foo.sh)
$ echo $PGHOST
localhost
Обратите внимание, что переменные оболочки не экспортируются, поэтому они не будут доступны в подпроцессах. Если они вам нужны в подпроцессах, попробуйте:
source <(sed '/=/!d;s/^/export /' foo.sh)
, который использует sed
для добавления команды export
в строки, которые соответствуют =
.
Кроме того, где вы работаете source
от? Если он есть в сценарии, помните, что переменные исчезнут после завершения сценария и не будут переданы родительскому процессу.