2010-07-27 4 views

cevap

12

Kesinlikle örneğin dosyaları veya diğer komutlara içinde boruya ek çıkışlar olacaktır. >&= modlu open komutu, dosya tanıtıcılarını rasgele dosya tanıtıcıları üzerinde açmanıza izin verir. Tabii

# perl 4fd.pl > file1 2> file2 3> file3 4> file4 5< file5 

open STDFOO, '>&=3'; 
open STDBAR, '>&=4'; 
open STDBAZ, '<&=5'; # works for input handles, too 

print STDOUT "hello\n"; 
print STDERR "world\n"; 
print STDFOO "42\n"; 
print STDBAR <STDBAZ>; 

$ echo pppbbbttt > file5 
$ perl 4fd.pl >file1 2>file2 3>file3 4>file4 5<file5 
$ cat file1 
hello 
$ cat file3 
42 
$ cat file4 file2 
pppbbbttt 
world 
+5

, etrafında kolları çağıran gitmek eğer 'bu tür bütün "std" şey cheapens STDFOO'. :) – hobbs

+0

hobbs haklıydı ama bence mobrule STDOUT ve STDERR'in sadece fd1 ve fd2 kutusundaki çıktı için eşanlamlı olduğunu göstermeye çalışıyordu, fakat bu değiştirilse bile, bir script noktası STDERR içinde çok nadir değil. Yazmak için açılan bir dosya için başka bir fd'ye. – mikegrb

+0

'> &' 'dup's (yeni bir dosya tanıtıcısı oluşturur) ve yeni dosya tanıtıcısından bir Perl dosyası tanıtıcısı oluşturur. Varolan dosya tanıtıcısı için Perl tutamacını oluşturmak için '> & =' kullanmalısınız. Sabit. – ikegami