system()调用perl

时间:2014-10-01 11:18:14

标签: linux perl shell

我想在perl脚本中进行system()调用,因为我想重定向stdinstdout,我想我需要将一个字符串传递给{{1让shell解释元字符。但是,我似乎无法正确检测程序何时通过system()段错误进行调用。

http://perldoc.perl.org/functions/system.html上的perl system()手册页警告“当shell间接执行系统参数时,结果和返回代码会受到其怪癖的影响。”我应该关注这个吗?

我测试system()的返回值的代码与同一手册页上给出的示例非常相似(就在我提到的警告之上),但回想起来似乎是为了调用{{1}带有列表。

所以,我认为我的核心问题是,如何从perl的system()中检测程序在shell中调用的终止方式。抱歉,如果这是一个重复的问题,但我无法在任何地方找到它。 FWIW我在Fedora发行版的Linux上运行脚本。

非常感谢。

1 个答案:

答案 0 :(得分:2)

我建议您查看IPC::Open2IPC::Open3

你要做的事情对于system来说有点过于复杂,它或多或少地适应于运行命令,然后捕获输出。

IPC::Open2允许您打开一个进程的exec管道,并将您自己的文件句柄附加到STDINSTDOUT,这意味着您可以进行双向通信。 (Open3也允许STDERR)。

在您附加的流程中捕获信号和错误有点复杂 - 您唯一 确定获得的唯一信息是返回代码。对于系统,$?应自动设置,但使用IPC::Open[23]时,您可能需要使用waitpid来捕获返回码。