/bin/sh источник от stdin (из другой программы) не файл

Своего рода хитрый для именования этого...

В основном у меня есть программа который когда выполненная печать на ряде 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

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

Какие-либо подсказки?

14
задан 18.04.2011, 23:19

4 ответа

Можно использовать eval:

eval "$(./settings)"

eval "`./settings`"
15
ответ дан 07.12.2019, 11:12

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

source <(./settings)

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

13
ответ дан 07.12.2019, 11:12
declare `./settings`

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

export `./settings`

Протестируйте его, конечно...

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

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

eval export `./settings`
6
ответ дан 07.12.2019, 11:12

source /dev/stdin < ./settings

Я думаю, что/dev/stdin является Linux только вещь все же.

2
ответ дан 07.12.2019, 11:12

Теги

Похожие вопросы