2009-03-08 24 views
1

Bourne kabuğunda komut çıktısını yakalamak için standart yol $() sözdizimi kullanmaktır: çıkışının çok şey var komutlar içinBourne kabuğundaki bir dosya tanıtıcısına komutun çıkışını nasıl yakalarım?

output=$(mycommand) 

Ancak bu kabuk uzun biri olarak her şey için bellek ayrılamadı gerektirir dize.

newfd=popen(mycommand) 
while read -u $newfd LINE; do 
    #process output 
done 

bu bile mümkün mü: Ben den read olabilecek bir dosya tanıtıcı Unix C fonksiyonu popen ahlaki eşdeğer almak için bir şeyi bulmak için tercih ediyorum?

+0

bash4 güzel yeni özellik vardır seçtiğiniz komutuyla 'ls' değiştirin: coproc. senin için ideal olurdu! çok kötü hala çok yeni –

cevap

7
#!bash 
ls | while read X 
do 
    echo $X is a directory entry 
done 

+0

Bunu gördüğünüzde tamamen açık. Hızlı cevabınız için teşekkür ederim! –

+1

while döngüsünün bir alt kabukta çalıştırıldığını ve bu nedenle değişkenlere yaptığı herhangi bir değişikliğin, betiğin geri kalanına geri aktarılmadığını bildirir – pixelbeat

+0

Örneğin, 'ls'yi bul ve 'printf' ile yankılanır. –

İlgili konular