2010-07-27 66 views

回答

12

绝对是附加输出到管中的文件或其他命令,例如。带有>&=模式的open命令允许您打开任意文件描述符的文件句柄。

# 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

当然,如果你四处调用句柄'STDFOO'它那种贬低整个“性病”的事情。 :) – hobbs 2010-07-27 21:56:04

+0

hobbs是对的,但我认为mobrule试图指出,STDOUT和STDERR只是fd1和fd2输出的同义词,但即使可以更改,在脚本点STDERR内也不是很少见到另一个文件的fd,这个文件已经被写入。 – mikegrb 2010-07-28 02:49:37

+0

'>&''dup's(创建一个新的文件描述符)并从新的文件描述符创建一个Perl文件句柄。您应该使用'>&='为现有的文件描述符创建一个Perl句柄。固定。 – ikegami 2014-04-18 17:59:13