Пришли сегодня ко мне с одной задачкой, мол есть у нас программка, которая висит в фоне и периодически выводит данные в консоль. Неудобно оператору работать, либо что-то другое делать, либо ничего не делать, лишь в консоль смотреть. Даже отдельный комп думаем программке выделить, чтоб она на нем крутилась-вертелась. И нельзя ли так сделать, чтоб программку на другом терминале запустить, чтоб можно было по 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
Исходники примера
Pingback: Интерактивный скрипт для переключения VPN’ок | Персональный блог Толика Панкова
Pingback: Linux. Вывод одновременно на консоль и в файл. Команда tee. | Персональный блог Толика Панкова