Sebelumnya saya menggunakan source
perintah seperti ini:
source file_name
Tapi yang saya coba lakukan adalah ini:
echo something | source
Yang tidak berhasil.
Sebelumnya saya menggunakan source
perintah seperti ini:
source file_name
Tapi yang saya coba lakukan adalah ini:
echo something | source
Yang tidak berhasil.
Jawaban:
Karena source
(atau .
) mengambil file sebagai argumen, Anda dapat mencoba:
source <(echo something)
Perintah sumber Anda memerlukan argumen file. Anda bisa mendapatkannya di beberapa shell dengan substitusi proses, dan ini karena dengan cara yang sama shell menggantikan ...
arg=$(echo hi)
... echo
bit di sana pada command-line dengan output subshell, dalam kasus substitusi itu menggantikan subshell dengan file bernama - biasanya /dev/fd/62
atau sesuatu - beberapa tautan ke deskriptor file. Dengan pipa deskriptor file adalah 0 jadi ...
echo 'echo hi' | . /dev/fd/0
... /dev/stdin
atau apa pun masalahnya harus bekerja dengan baik pada sistem linux - dan banyak lainnya. Anda juga dapat menggunakan di sini-dokumen serupa:
. /dev/fd/3 3<<HI
$(echo 'echo hi')
HI
Anda dapat memverifikasi cara shell Anda menangani substitusi proses, dengan cara:
(set -x; readlink <(:))
... yang cetakan (dalam bash
) :
+ set +x
+ readlink /dev/fd/63
++ :
pipe:[2212581]
... dan kita dapat melihat bahwa shell sedang melakukan substitusi dan readlink
sedang membaca dari sebuah pipa anoymous yang dibuka pada file-descriptor 63.