İç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
lssadece rastgele bir örnek, orijinal metin herhangi bir şey olabilir. sedayrıca, metni dönüştürmek için sadece bir örnek. İşin ilginç yanı sh. Ne yaparsam alayım shve 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-fileKomutlar 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 .docdosyaları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.