2010-08-26 16 views
6

Bir işlemin üstesinden gelmek ve üç farklı programla analiz etmek istiyorum. Adlandırılmış borular kullanabildim, ancak bunun yerine fd kullanabiliyorum.Adlandırılmış borular yerine fd'ye nasıl yazılır

Burada şimdiye kadar çalışır ne:

 

exec 3< <(myprog) 
tee p1 p2 >/dev/null <&3 

cat p1|ap1 & 
cat p2|ap2 & 
 

p1 ve p2 mkfifo ile oluşturulmuştur. ap1 ve ap2 analiz programlarıdır. Bu doğru diyorum, bilmiyorum ama tee yerine iki yeni fd'ye bir yolu var mı? Böyle bir şey:

 

exec 3< <(myprog) 
tee >&4 >&5 <&3 

cat <&4|ap1 & 
cat <&5|ap2 & 
 

cevap

5

Neredeyse vardı: ap1 bir işlev olabilir

myprog | tee >(ap1) >(ap2) >(ap3) >/dev/null 

Not. Eğer fonksiyon, yani

ap1() { 
    # here the script arguments are available as $1, $2, ... 
} 
# ditto for ap2, ap3 
myprog | tee >(ap1 "[email protected]") >(ap2 "[email protected]") >(ap3 "[email protected]") >/dev/null 

, komut dosyanızın argüman erişebilir "[email protected]" ile aramak isterseniz sizin kabuk >() (do bash, ksh ve zsh, ancak POSIX değil) desteklemez, ancak varsa İşletim Sisteminiz yine de /dev/fd'u destekler (Solaris, Linux, * BSD, OSX ve Cygwin dahil olmak üzere çoğu ünite), açık fd karıştırmayı kullanabilirsiniz.

{ { { myprog | tee /dev/fd/3 /dev/fd/4 | 
     ap1 >&2 
    } 3>&1 | 
    ap2 >&2 
    } 4>&1 | 
    ap3 >&2 
} 
+0

Ahh. Bu işe yarayabilir. FD'nin tişörtüne giden bir yolu var mı? ap1 ve ap2, boru hatları ve ton anahtarı ile büyük komutlardır. Bir fd kullanabilirsem daha kolay okunabilir. – User1

+0

@ User1: kesinlikle mümkün (ve <()' and '>() 'desteklemeyen kabuklarda çalışma avantajı vardır, ancak sözdizimi garip. Burada ap1 ve ap2 fonksiyonlarını tanımlamak daha kolay olurdu. – Gilles

+0

Diğer sözdizimi nedir? Komut dosyasının bazı bölümlerinde, ap1'in giriş parametrelerine göre nasıl çağrıldığını değiştiren ifadeler kullandığını fark ettim. '>()' muhtemelen benim durumumda pek işe yaramayacaktır. Ama başka nasıl arayabilirim bilmiyorum. Herhangi bir fikir? Yardımlarınız için şimdiye kadar teşekkürler. – User1

İlgili konular