Linux perl中的system()调用
我想在perl脚本中调用Linux perl中的system()调用,linux,perl,shell,Linux,Perl,Shell,我想在perl脚本中调用system(),因为我想重定向stdin和stdout,我想我需要向system()传递一个字符串,让shell解释元字符。但是,我似乎无法正确检测程序何时通过system()segfaults调用 perlsystem()手册页中的告诫“当系统的参数由shell间接执行时,结果和返回代码会受到其怪癖的影响。”我应该关注这一点吗 我测试system()返回值的代码与同一手册页上给出的示例(就在我提到的警告上方)几乎相同,但回想起来,它似乎是用于调用带有列表的system
system()
,因为我想重定向stdin
和stdout
,我想我需要向system()
传递一个字符串,让shell解释元字符。但是,我似乎无法正确检测程序何时通过system()
segfaults调用
perlsystem()
手册页中的告诫“当系统的参数由shell间接执行时,结果和返回代码会受到其怪癖的影响。”我应该关注这一点吗
我测试system()
返回值的代码与同一手册页上给出的示例(就在我提到的警告上方)几乎相同,但回想起来,它似乎是用于调用带有列表的system()
所以,我想我的核心问题是,如何检测一个程序是如何终止的,它是在一个shell中从perl的system()
调用的。抱歉,如果这是一个重复的问题,但我找不到它之前任何地方解决。FWIW我正在linux的Fedora发行版上运行脚本
非常感谢。我建议您看看 对于
system
系统来说,您试图做的事情有点太复杂了,它或多或少准备好运行一个命令,然后捕获输出
IPC::Open2
允许您打开进程的exec管道,并将自己的文件句柄附加到STDIN
和STDOUT
,这意味着您可以进行双向通信。(Open3还允许STDERR
)
捕获附加进程中的信号和错误有点复杂-唯一可以确定的是返回代码。对于系统,
$?
应自动设置,但对于IPC::Open[23]
您可能需要使用waitpid
来捕获返回代码 他们的水平太低了!IPC::Run3和IPC::Run更易于使用。