Толик Панков
hex_laden
............ .................. ................
October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Переопределение вывода на другой терминал в 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/pereopredelenie-vyvoda-na-drugoj-terminal-v-linux/

From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs IP addresses of anonymous posters.