11

Вид хитрый, чтобы назвать это ...

В основном у меня есть программа, которая при запуске печатает на STDOUT набор переменных оболочки:

$ ./settings
SETTING_ONE="this is setting one"
SETTING_TWO="This is the second setting"
ANOTHER_SETTING="This is another setting".

Я хочу запустить это из сценария оболочки, как если бы STDOUT оценивался с source .

Я хотел бы сделать что-то вроде ...

source `./settings`

... но, конечно, это не работает.

Я знаю, что мог сделать:

./settings >/tmp/file
source /tmp/file

но я действительно не хочу этого делать.

Есть какие-нибудь подсказки?

4 ответа4

13

В системах, где доступен /dev/fd , bash поддерживает подстановку процессов:

source <(./settings)

Здесь <( ) расширится до автоматически назначенного пути в /dev/fd/... из которого можно прочитать выходные данные ./settings .

11

Вы можете использовать eval:

eval "$(./settings)"

eval "`./settings`"
5
declare `./settings`

Или конечно ...

export `./settings`

Проверьте это конечно ...

export `echo -e "asdf=test\nqwerty=dvorak"` ; echo $asdf $qwerty

Обработка пробелов:

eval export `./settings`
0

source /dev/stdin < ./settings

Я думаю, что /dev /stdin - это единственная вещь для Linux.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .