Как перенаправить вывод из интерактивного сценария 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");
Другие вопросы по тегам