我正在尝试使用以下代码将perl系统命令重定向到输出文件,但是它不起作用?
$cmd="echo hi";
($second, $minute, $hour) = localtime();
$time="$hour:$minute:$second";
system("$time>new.txt");
system("$cmd 1>>new.txt 2>>&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程序员)强烈建议在脚本中使用strict
和warnings
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");