Как вставить вывод нескольких команд в один выходной файл

Приглашение к отзыву

Вместо того, чтобы добавлять еще один шеллскрипт к моему уже существующему ответу, я думаю, будет лучше со вторым ответом. Я прислушаюсь к отзывам и сосредоточусь на предпочтительном сценарии/методе и попытаюсь объединить то, что предпочтительно, в один ответ (, если только нет причин оставить их все (для разных целей ).

Мониторинг диалога программы и отправка оповещения

Вы можете отслеживать активность

  1. afifoили
  2. файл журналаxterm

и запускатьzenityинформационное сообщение при вводе данных из контролируемой программы. Если хотите, вы также можете установитьespeakи позволить ему отправлять звуковое сообщение .

Этот ответ посвящен второму варианту с использованием fifo .

Запуск информационного сообщения zenityпри вводе данных от контролируемой программы с использованием FIFO.

1.1 Использование xterm, мониторинг стандартного вывода и стандартной ошибки через fifo

Этот wrapperметод имеет

  • Преимущество в том, что ни один прямой ввод не вызовет оповещения. Это хорошо работает со многими программами, например cp -iи sudo.
  • недостаток , что
    • некоторые программы будут отключены, потому что они используют не только стандартный вывод и стандартную ошибку для записи своего вывода. Пример:sftpпотеряет подсказку, и пользователь не сможет узнать, когда программа будет готова к новой задаче.
    • некоторые программы повторяют ввод (есть косвенный ввод ), и это вызовет предупреждение, которое может вызвать много предупреждений в сценарии оболочки, который не принимает это во внимание. Пример:ssh.

1.2 Использование скомпилированной программы scriptи ее лог-файла через fifo

Следующий шелл-скрипт может отслеживать диалог вывода из программы и отправлять предупреждение. Он требует espeakиscript(scriptне требует установки в Ubuntu и Debian ).

sudo apt update
sudo apt install espeak
  • предполагается графическая среда рабочего стола
  • запустить шеллскрипт в окне терминала, назовем егоviafifo.
  • запуск отслеживаемой программы «в viafifo»
  • запуск диалога в окне терминала (, где вы записываете ввод)
  • использование FIFO для доступа к выходным данным программы, которую нужно отслеживать, /dev/stdin, /dev/stdoutи dev/stderr. Основной задачей в шеллскрипте является строка с программой script, т.е. отслеживание активности в окне терминала и запись в fifo.
  • запуск цикла while
    • проверка того, был ли изменен FIFO, и в этом случае
      • запуск окна информационного сообщения zenityи соответствующего голосового сообщения с помощью espeak.
      • допускаются короткие задержки при наборе ввода (8 секунд; вы можете отредактировать файл сценария, чтобы изменить время задержки ).

Ожидается, что вы закроете окно zenity, (можете работать с 'Enter' ), чтобы вернуться в окно xterm, где вы вводите свой ввод.

Введите exit, чтобы выйти из scriptи viafifo. После этого вы можете получить лог-файл со всем диалогом.

viafifoтестируется с

  • Ubuntu 18.04.1 LTS .Вы найдете код bash из viafifoв по этой ссылке .
  • Debian 9.6.0, «Растягивание». См. следующие скриншоты и распечатку time viafifoи viafifo.log.

Демонстрационный пример

Скриншоты

enter image description here

enter image description here

time viafifo

user@debian:~$ time viafifo
----- Start viafifo ------------------------------------------------------------
user@debian:~$ echo hello
hello
user@debian:~$ exit
exit
----- End viafifo --------------------------------------------------------------
See 'viafifo.log'
viafifo used 8 seconds plus a few (5-10) seconds for preparing and finishing
real    0m13.295s
user    0m0.104s
sys 0m0.012s

viafifo.log

user@debian:~$ cat viafifo.log
Script started on Sat 05 Jan 2019 07:57:45 PM UTC
user@debian:~$ echo hello
hello
user@debian:~$ exit
exit
viafifo used 8 seconds
user@debian:~$ 
1
06.03.2021, 18:40
0 ответов

Теги

Похожие вопросы