perl system命令重定向到日志文件

时间:2012-03-29 09:47:07

标签: perl

我正在尝试使用以下代码将perl系统命令重定向到输出文件,但是它不起作用?

$cmd="echo hi";
($second, $minute, $hour) = localtime();
$time="$hour:$minute:$second";

system("$time>new.txt");

system("$cmd   1>>new.txt 2>>&1");

1 个答案:

答案 0 :(得分:6)

如果您想将变量$time写入文本文件,open可写文件句柄并将其打印到您的文件中。

open(my $outfile, '>', 'new.txt');
print $outfile $time;
...

其次,输出重定向应为:

1>>new.txt 2>&1

这意味着“将STDOUT(1)附加到new.txt,将STDERR(2)重定向到STDOUT(1)”。让>>对第二部分毫无意义。

最后,我(以及其他所有perl程序员)强烈建议在脚本中使用strictwarnings pragma。这将帮助您了解脚本中的任何错误或潜在问题。完成此操作后,所有变量都必须使用my声明,这是一个很好的习惯。毕竟,你的脚本看起来应该是这样的:

# recommended pragmas:
use strict;
use warnings;

# declare all new variables with "my"
my $cmd="echo hi";
my ($second, $minute, $hour) = localtime();
my $time="$hour:$minute:$second";

# open a writeable filehandle and print to the filehandle
open(my $outfile, '>', 'new.txt');
print $outfile $time,"\n"; # I've added a newline character here so that 
                           # the time and the command's output are on different lines ;)

system("$cmd   1>>new.txt 2>&1");