Переопределение вывода на другой терминал в Linux
Пришли сегодня ко мне с одной задачкой, мол есть у нас программка, которая висит в фоне и периодически выводит данные в консоль. Неудобно оператору работать, либо что-то другое делать, либо ничего не делать, лишь в консоль смотреть. Даже отдельный комп думаем программке выделить, чтоб она на нем крутилась-вертелась. И нельзя ли так сделать, чтоб программку на другом терминале запустить, чтоб можно было по Ctrl+Alt+F[номер] переключаться, и за состоянием программки смотреть?
Вот запустить нельзя, без особого бубна, а вывод переопределить, всегда пожалуйста.
Можно пользуясь стандартным перенаправлением ввода-вывода в Linux, заставить программу или скрипт отправлять сообщения на другой терминал. Пусть программка будет называться
tscript
. За терминалы в Linux отвечают устройства /dev/tty*
, например, /dev/tty2
отвечает за терминал, вызываемый по Ctrl+Alt+F2. Например, чтобы программа переопределяла вывод на
/dev/tty2
, запускаем ее таким образом:tscript >/dev/tty2
Можно отправить на другой терминал только вывод сообщений об ошибках:
tscript 2>/dev/tty2
Чтобы программа работала в фоне, а на том терминале, с которого мы ее запустили, можно было продолжить работу, добавляем после команды знак
&
:./tscript >/dev/tty2 &
Пишем тестовый скрипт, который, скажем, будет бесконечно выводить на консоль случайное шестнадцатиричное число раз в секунду:
#!/bin/bash
SEC=1
echo "Test script, write to STDOUT random number after $SEC sec."
while [ 1 -eq 1 ];do
sleep $SEC
printf 'Number: %x\n' $RANDOM
done
Пишем скрипт, который будет убивать тестовый:
#!/bin/bash
echo "Kill test script..."
pkill tscript
Пишем запускающий скрипт, в котором вывод тестового скрипта переопределяется на терминал
tty2
:#!/bin/bash
TERMNO=2
echo "Send tscript output to terminal #$TERMNO"
./tscript >/dev/tty$TERMNO &
Запускаем тестовый скрипт на текущем терминале:
Выполняем запускающий скрипт:
Состояние tty1
Вывод на tty2
Исходники примера
На GitHub
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/08/09/pere