Daha önce source
böyle bir komut kullandım :
source file_name
Ama yapmaya çalıştığım şey şudur:
echo something | source
Bu işe yaramıyor.
Daha önce source
böyle bir komut kullandım :
source file_name
Ama yapmaya çalıştığım şey şudur:
echo something | source
Bu işe yaramıyor.
Yanıtlar:
Yana source
(veya .
) argüman olarak bir dosya alır, sen deneyebilirsiniz:
source <(echo something)
Kaynak komutunuz bir dosya argümanı gerektirir. Bunu, işlem kabiliyetine sahip bazı mermilerde alabilirsiniz, çünkü bunun nedeni kabuğun yerini almasıdır.
arg=$(echo hi)
... echo
alt kabuk çıktısının bulunduğu komut satırındaki bit, işlem değişikliği durumunda, alt kabuğu adlandırılmış bir dosyayla değiştirir - genellikle /dev/fd/62
ya da bir şey - bir dosya tanıtıcısına bağlanır. Bir boru ile dosya tanımlayıcısı 0'dır ...
echo 'echo hi' | . /dev/fd/0
... /dev/stdin
ya da durum ne olursa olsun, herhangi bir linux sisteminde - ve bunun dışında birçoğunda iyi çalışmalıdır. Burada da belgeleri benzer şekilde kullanabilirsiniz:
. /dev/fd/3 3<<HI
$(echo 'echo hi')
HI
Bu arada, kabuğunuzun işlem değişimini işleme biçimini doğrulayabilirsiniz:
(set -x; readlink <(:))
... hangi baskılar (in bash
) :
+ set +x
+ readlink /dev/fd/63
++ :
pipe:[2212581]
... ve böylece kabuğun değişimini yaptığını ve readlink
dosya-tanımlayıcı 63'te açtığı muazzam bir borudan okuduğunu görebiliyoruz.