Bisher habe ich den folgenden source
Befehl verwendet :
source file_name
Aber was ich versuche zu tun, ist Folgendes:
echo something | source
Welches funktioniert nicht.
Da source
(oder .
) eine Datei als Argument verwendet, können Sie Folgendes versuchen:
source <(echo something)
Ihr Quellbefehl erfordert ein Dateiargument. Sie können dies in einigen Shells durch eine Prozessersetzung erreichen, und das liegt daran, dass die Shell auf die gleiche Weise ...
... das
echo
Bit dort in der Befehlszeile, das die Ausgabe der Subshell enthält. Im Falle einer Prozessersetzung ersetzt es die Subshell durch eine benannte Datei - normalerweise/dev/fd/62
oder so etwas -, die mit einem Dateideskriptor verknüpft ist. Bei einer Pipe ist der Dateideskriptor 0, also ......
/dev/stdin
oder was auch immer der Fall sein mag, sollte auf jedem Linux-System gut funktionieren - und vielen anderen. Sie können hier-Dokumente auch ähnlich verwenden:Sie können wie folgt überprüfen, wie Ihre Shell die Prozessersetzung handhabt:
... welche druckt (in
bash
) :... und so können wir sehen, dass die Shell die Ersetzung durchführt und
readlink
aus einer anoymischen Pipe liest, die sie im Dateideskriptor 63 öffnet.quelle