我需要在perl脚本中运行一个shell命令(它需要是一个shell命令)但是我需要在perl循环中使用一个变量
实施例。做像
这样的事情#!/usr/bin/perl
for my $i (0..9) {
`echo $i`;
}
应该产生输出
0
1
2
3
4
5
6
7
8
9
答案 0 :(得分:5)
您可以通过多种方式执行此操作,具体取决于所需的内容。错误处理是它的另一个方面。一般来说,这个
涉及使用system
,qx
(反引号)或open
。见下面的链接。
qx
将STDOUT
返回给该计划。如果需要,可将其分配给变量。
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
。由它运行的命令继承脚本的STDOUT
和STDERR
,因此它们打印到标准流的内容将转到脚本输出的位置(除非它被命令调用重定向)
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
中的perlop
和qx
。错误处理仅在上面指出,请参阅文档了解更多您可以执行的操作。最后,有open
种运行过程的各种形式。例如,请参阅it in perlfaq8
,以及对所询问内容的完整评论。
可以通过shell执行命令(但是通过execvp
),具体取决于确切的调用,请参阅文档。短语" shell命令"严格意味着shell本身提供的设施,在这种情况下,你当然希望以这种方式运行它。但是,它通常也用于我们通常通过键入终端来执行的程序,因此它由shell执行。在这种情况下,您可能(或可能不想)绕过shell,如果愿意,您可以这样做。
还要注意上面的所有块(在完成之前不要返回控件),因此脚本只有在完成后才会继续。这似乎是你想要的。
答案 1 :(得分:0)
如果您只想传递shell输出,只需执行
即可print STDOUT `echo $i`;