Как перенаправить вывод из интерактивного сценария Perl в файл и консоль?
У меня сложный интерактивный скрипт, работающий с программным обеспечением для контроля версий (clearcase). Т.е. пользователь выбирает варианты, предложенные в консоли. Скрипт должен быть выполнен (с интерактивностью и выводом на консоль), и весь вывод этого скрипта должен быть сохранен в файл для дальнейшей обработки. Например, строка
perlscript | tee output.tmp
отображает первые два printOut из perl-скрипта, затем (вероятно, во время извлечения информации из системы контроля версий) выполнение останавливается (ничего не происходит) и ничего не записывается в файл. Я использую CSH. Я не могу изменить Perl скрипт. Вы должны сделать это в csh. Возможно, это можно сделать с помощью дополнительного сценария Perl.
2 ответа
Вы можете использовать script
Команда для записи журнала всей сессии.
Просто введите:
script <logfilename>
Перед запуском вашего скрипта как обычно. Когда вы закончили печатать exit
закрыть файл журнала.
Если вы хотите включить это в ваш скрипт, вы можете создать скрипт-обертку для его запуска следующим образом:
#!/bin/bash
script "My_logfile" my_script
Это создаст файл журнала и запустит my_script
, Когда скрипт завершится, файл журнала будет закрыт.
Я думаю, что если вы не можете изменить свой скрипт, вам нужна оболочка для перезаписи STDOUT в файл.
#! /usr/bin/perl
my $file = "out.txt";
open STDOUT, ">$file";
system("your perlscript");