Консольный вывод программы, включая перенаправленный стандартный ввод? - PullRequest
3 голосов
/ 15 апреля 2011

У меня есть программа командной строки, в которую я передаю перенаправленный ввод и передаю в файл:

./program < some_input_file > some_output_file

Это, очевидно, записывает вывод, не включая перенаправленный ввод. Есть ли какой-нибудь простой способ получить журнал программы, , включая перенаправленный ввод, который я передал?

Я открыт для использования внешней программы или скрипта - я запускаю это на bash / linux.

[EDIT] * * +1010

Я ищу способ чередования вывода - как если бы программа запускалась в терминале, а входной файл просто вводился вручную

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Если ваша программа печатает какое-либо приглашение перед прочтением следующего ввода, вы можете использовать expect для взаимодействия с ним. Ваш скрипт expect может распечатать каждую строку ввода, когда она прочитана, и отправить ее в программу, как только увидит подсказку. Это дает вам правильный чередующийся вывод без запуска вашей программы один раз в строке.

1 голос
/ 15 апреля 2011

Ниже приведен пример того, как вы можете это сделать:

> cat input.txt
asdf
qwer
zxcv
> tee output.txt < input.txt | cat >> output.txt 
> cat output.txt
asdf
qwer
zxcv
asdf
qwer
zxcv

Просто замените cat в вышеприведенной программе, и все будет хорошо. Теперь, если вы хотите, чтобы это чередовалось, тогда вы должны сделать что-то другое:

> while read line
  do
      echo $line >> output.txt
      echo $line | cat >> output.txt
  done < 'input.txt'
> cat output.txt
asdf
asdf
qwer
qwer
zxcv
zxcv

снова заменив cat сценарием оболочки.

...