Trudno nazwać to ...
Zasadniczo mam program, który po uruchomieniu wypisuje na STDOUT zestaw zmiennych powłoki:
$ ./settings
SETTING_ONE="this is setting one"
SETTING_TWO="This is the second setting"
ANOTHER_SETTING="This is another setting".
Chcę uruchomić to w skrypcie powłoki tak, jakby STDOUT był oceniany source
.
Chciałbym zrobić coś takiego ...
source `./settings`
... ale oczywiście to nie działa.
Wiem, że mógłbym:
./settings >/tmp/file
source /tmp/file
ale naprawdę nie chcę tego robić.
Jakieś wskazówki?
sh
też - może to być dowiązanie symboliczne do myślnika, popiołu, busybox ... Nie widziałem kopii „prawdziwego„ sh ”na żywo.$( )
- zaczynając od powłoki Almquista 4.3BSD - i to także POSIX. (Uwaga: nie kłócąc się, tylko ciekawy.)W systemach gdzie
/dev/fd
jest dostępny, bash obsługuje podstawianie procesów:Tutaj,
<( )
rozwinie się do automatycznie przypisanej ścieżki pod/dev/fd/...
z którego wyjście./settings
można przeczytać.źródło
Albo oczywiście ...
Przetestuj to oczywiście ...
Obsługa białych znaków:
źródło
export
sztuczka działa! Dziękia backtick --> ` <--
and here's another one --> ` <--
source /dev/stdin < ./settings
Myślę, że / dev / stdin to jednak tylko Linux.
źródło
/dev/stdin
działa również na BSD i Cygwin.|
jednak jest nie będzie działać (przynajmniej nie dokładnie), ponieważ obie strony potoku są oddzielnymi podprocesami, więc źródła poleceń nie będą miały wpływu na bieżącą powłokę.