我在perl脚本中运行命令,如下所示:
#!/usr/bin/env perl
`tar zvcf /tmp/js.tgz -C /home/cuidehe/js .`;
我得到了/tmp/js.tgz
,但我无法得到详细的输出?
答案 0 :(得分:3)
Backticks(``) or qx
运行命令并返回STDOUT
。因此,您只需要一个变量来捕获STDOUT
。 STDERR
未受影响。
#!/usr/bin/env perl
my $stdout = `tar zvcf /tmp/js.tgz -C /home/cuidehe/js .`;
print "$stdout";
或强>
您可以使用system
。它会运行一个命令并返回其退出状态(STDOUT
并且STDERR
不受影响)。
my $exit_status = system('tar zvcf /tmp/js.tgz -C /home/cuidehe/js .');
print "Exit Status: $exit_status\n";
答案 1 :(得分:3)
您需要在Perl中为命令输出指定目标:
my $output = `tar zvcf /tmp/js.tgz -C /home/cuidehe/js .`;
print $output;
所有输出线最终都是$ output。 命名变量$ STDOUT并不好,因为它是Perl中的保留关键字。
该命令可能会产生多行输出。使用open
可能会更好:
open my $fh,'-|','tar zvcf /tmp/js.tgz -C /home/cuidehe/js .'
or die 'Error launching tar';
while (<$fh>) {
chomp; # Remove the trailing \n from the input line
print "Got line: $_\n"; # Do whatever you want here.
}
close $fh;
您也可以使用
捕获STDERRopen my $fh,'-|','tar zvcf /tmp/js.tgz -C /home/cuidehe/js . 2>&1'
or die 'Error launching tar';
这会将任何错误重定向到STDERR,并且您将(文件和错误)同时发送到同一$fh
。
IPC::Open3可以捕获(STDOUT和STDERR)到不同的文件句柄。
更新(感谢@ Dummy00001):
my @output = `tar zvcf /tmp/js.tgz -C /home/cuidehe/js .`;
将tar输出的每一行作为一个数组项返回。