Перенаправление системных команд perl на файлы журналов - PullRequest
3 голосов
/ 29 марта 2012

Я пытаюсь перенаправить системную команду perl для вывода файла со следующим кодом вместе со временем, но он не работает ??

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

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

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

1 Ответ

6 голосов
/ 29 марта 2012

Если вы хотите записать переменную $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. Это поможет вам выявить любые ошибки или потенциальные проблемы в сценариях. После того, как вы это сделаете, все переменные должны быть объявлены с 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...