İçeriği bir dosyadan alacak ve mevcut kabukta çalıştıracak source
(aka .
) yardımcı programından haberdarım .
Şimdi, bazı metni kabuk komutlarına dönüştürüyorum ve ardından aşağıdaki gibi çalıştırıyorum:
$ ls | sed ... | sh
ls
sadece rastgele bir örnek, orijinal metin herhangi bir şey olabilir. sed
ayrıca, metni dönüştürmek için sadece bir örnek. İşin ilginç yanı sh
. Ne yaparsam alayım sh
ve onu çalıştırır.
Benim sorunum, bu yeni bir alt kabuk başlatmak anlamına geliyor. Komutların mevcut kabuğumda çalışmasını tercih ederim. source some-file
Komutlar bir metin dosyasında olsaydı, yapabileceğim gibi .
Bir geçici dosya oluşturmak istemiyorum çünkü kirli hissediyor.
Alternatif olarak, alt kabuğumu mevcut kabuğumla tamamen aynı özelliklerle başlatmak istiyorum.
Güncelleme
Tamam, backtick kullanan çözümler kesinlikle işe yarıyor, ancak genellikle çıktıyı kontrol ederken ve değiştirirken bunu yapmam gerekiyor, bu yüzden sonucu bir şeye yönlendirmenin bir yolu olsaydı daha çok tercih ederim.
üzücü güncelleme
Ah, bu /dev/stdin
şey çok güzel görünüyordu ama daha karmaşık bir durumda işe yaramadı.
Yani bende şu var:
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin
Bu, tüm .doc
dosyaların uzantılarının küçük harfli olmasını sağlar .
Ve bu tesadüfen halledilebilir xargs
, ama asıl mesele bu.
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv
Yani, ilkini çalıştırdığımda, hemen çıkacak, hiçbir şey olmuyor.