2015-03-31 109 views
0
 my $EXE = FileHandle->new; 
     my $fd = 3; # <-------- doest work 
     open $EXE, q{-|}, 
      "$myexe make 2>&1 <%=$fd" 
      or die('Cannot open EXE'); 
     $err = !(close $EXE); 

我想将stdin重定向到一些虚拟文件描述符(最好不必打开文件)。perl:获取一个新的文件描述符来将stdin重定向到

任何建议如何在2>&1之后重做stdin?

回答

1
2>&1 # Dups fd 1 onto fd 2 

所以

0<&3 # Dups fd 3 onto fd 0 
<&3  # "<" affects fd 0 by default 

所以

open(my $from_child, '-|', "foo 2>&1 <&$fd") 

我不禁想知道为什么你想这样做。是否使用IPC::Run3IPC::Run可以做得更好?

+0

是的,我得到了。 3:错误的文件描述符错误。嗯,我不太了解IPC :: Run。 – ealeon 2015-03-31 15:21:57

+0

你为什么试图从一个不存在的fd读取? – ikegami 2015-03-31 15:25:03

+0

我想创建一个虚拟FD,我可以从 – ealeon 2015-03-31 15:26:49