Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux perl中的system()调用_Linux_Perl_Shell - Fatal编程技术网

Linux perl中的system()调用

Linux perl中的system()调用,linux,perl,shell,Linux,Perl,Shell,我想在perl脚本中调用system(),因为我想重定向stdin和stdout,我想我需要向system()传递一个字符串,让shell解释元字符。但是,我似乎无法正确检测程序何时通过system()segfaults调用 perlsystem()手册页中的告诫“当系统的参数由shell间接执行时,结果和返回代码会受到其怪癖的影响。”我应该关注这一点吗 我测试system()返回值的代码与同一手册页上给出的示例(就在我提到的警告上方)几乎相同,但回想起来,它似乎是用于调用带有列表的system

我想在perl脚本中调用
system()
,因为我想重定向
stdin
stdout
,我想我需要向
system()
传递一个字符串,让shell解释元字符。但是,我似乎无法正确检测程序何时通过
system()
segfaults调用

perl
system()
手册页中的告诫“当系统的参数由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更易于使用。