In precedenza ho usato il source
comando in questo modo:
source file_name
Ma quello che sto cercando di fare è questo:
echo something | source
Che non funziona.
In precedenza ho usato il source
comando in questo modo:
source file_name
Ma quello che sto cercando di fare è questo:
echo something | source
Che non funziona.
Risposte:
Poiché source
(o .
) accetta un file come argomento, puoi provare:
source <(echo something)
Il comando source richiede un argomento file. Puoi ottenerlo in alcune shell con una sostituzione di processo, e questo perché allo stesso modo la shell sostituisce ...
arg=$(echo hi)
... il echo
bit presente sulla riga di comando con l'output della subshell, in caso di sostituzione del processo sostituisce la subshell con un file denominato - di solito /dev/fd/62
o qualcosa del genere - un collegamento a un descrittore di file. Con una pipe il descrittore di file è 0, quindi ...
echo 'echo hi' | . /dev/fd/0
... /dev/stdin
o comunque sia, dovrebbe funzionare perfettamente su qualsiasi sistema linux - e molti altri. Puoi anche usare qui-documenti in modo simile:
. /dev/fd/3 3<<HI
$(echo 'echo hi')
HI
È possibile verificare il modo in cui la shell gestisce la sostituzione del processo, tra l'altro:
(set -x; readlink <(:))
... che stampa (in bash
) :
+ set +x
+ readlink /dev/fd/63
++ :
pipe:[2212581]
... e così possiamo vedere che la shell sta facendo la sostituzione e readlink
sta leggendo da una pipe anoyema che si apre sul descrittore di file 63.