使用perl循环中的变量在perl循环中运行shell命令

时间:2016-06-03 20:21:43

标签: perl shell

我需要在perl脚本中运行一个shell命令(它需要是一个shell命令)但是我需要在perl循环中使用一个变量

实施例。做像

这样的事情
#!/usr/bin/perl
for my $i (0..9) {
     `echo $i`;
}

应该产生输出

0
1
2
3
4
5
6
7
8
9

2 个答案:

答案 0 :(得分:5)

您可以通过多种方式执行此操作,具体取决于所需的内容。错误处理是它的另一个方面。一般来说,这个 涉及使用systemqx(反引号)或open。见下面的链接。

qxSTDOUT返回给该计划。如果需要,可将其分配给变量。

for my $i (0..9) {
    my $cmd = "external-command $i";
    my $cmdout = qx($cmd);
    print $cmdout;         # process as needed
}

输出也可以分配给一个数组,每一行都成为一个数组元素。根据您的命令,您可能需要密切关注如何正确引用它。如果您想获得命令STDERR以及

my $cmd = "external-command $i 2>&1";

如果您不需要在脚本中提供输出,或者特别希望它与其他脚本的输出一起使用,请使用system。由它运行的命令继承脚本的STDOUTSTDERR,因此它们打印到标准流的内容将转到脚本输出的位置(除非它被命令调用重定向)

for my $i (0..9) {
    my $cmd = "external-command $i";
    my $ret = system($cmd);
    if ($ret != 0) {
        warn "Error running $cmd ($ret)";
        # interrogate further, see documentation for 'system'
    }
}

请参阅system中的perlopqx。错误处理仅在上面指出,请参阅文档了解更多您可以执行的操作。最后,有open种运行过程的各种形式。例如,请参阅it in perlfaq8,以及对所询问内容的完整评论。

可以通过shell执行命令(但是通过execvp),具体取决于确切的调用,请参阅文档。短语" shell命令"严格意味着shell本身提供的设施,在这种情况下,你当然希望以这种方式运行它。但是,它通常也用于我们通常通过键入终端来执行的程序,因此它由shell执行。在这种情况下,您可能(或可能不想)绕过shell,如果愿意,您可以这样做。

还要注意上面的所有块(在完成之前不要返回控件),因此脚本只有在完成后才会继续。这似乎是你想要的。

答案 1 :(得分:0)

如果您只想传递shell输出,只需执行

即可
print STDOUT `echo $i`;