我想在perl脚本中进行system()
调用,因为我想重定向stdin
和stdout
,我想我需要将一个字符串传递给{{1让shell解释元字符。但是,我似乎无法正确检测程序何时通过system()
段错误进行调用。
http://perldoc.perl.org/functions/system.html上的perl system()
手册页警告“当shell间接执行系统参数时,结果和返回代码会受到其怪癖的影响。”我应该关注这个吗?
我测试system()
的返回值的代码与同一手册页上给出的示例非常相似(就在我提到的警告之上),但回想起来似乎是为了调用{{1}带有列表。
所以,我认为我的核心问题是,如何从perl的system()
中检测程序在shell中调用的终止方式。抱歉,如果这是一个重复的问题,但我无法在任何地方找到它。 FWIW我在Fedora发行版的Linux上运行脚本。
非常感谢。
答案 0 :(得分:2)
我建议您查看IPC::Open2和IPC::Open3
你要做的事情对于system
来说有点过于复杂,它或多或少地适应于运行命令,然后捕获输出。
IPC::Open2
允许您打开一个进程的exec管道,并将您自己的文件句柄附加到STDIN
和STDOUT
,这意味着您可以进行双向通信。 (Open3也允许STDERR
)。
在您附加的流程中捕获信号和错误有点复杂 - 您唯一 确定获得的唯一信息是返回代码。对于系统,$?
应自动设置,但使用IPC::Open[23]
时,您可能需要使用waitpid
来捕获返回码。