У меня есть процесс Linux, разработанный сторонней организацией, которая взаимодействует с терминалом. Для отладки я хочу, чтобы сообщение вернулось вперед.
Кто-то может подумать, что cat
сделает свое дело (чтобы увидеть одно направление):
./third-party-app &
cat /dev/tty
... но это не так. Скорее всего, cat
похитит половину данных, предназначенных для приложения, что в значительной степени бесполезно.
стороннее приложение жестко запрограммировано на /dev/tty
.
Один из способов шпионить за сообщением - переименовать устройство /dev/tty
, скажем, в /dev/real_tty
и создать вместо него именованный канал с именем /dev/tty
. Затем работает:
cat /dev/real_tty | tee /dev/tty &
... по крайней мере позволит мне увидеть вывод /dev/real_tty
, скопировав данные из /dev/real_tty
в именованный канал /dev/tty
и stdout
.
Такого рода работы, но они кажутся очень хитрыми и основаны на хитрости замены устройства. Он также не работает в обоих направлениях, потому что именованные каналы переносят данные только в одном направлении.
Как правильно это сделать?
Если кому-то интересно, устройство TTY представляет собой канал связи RS-232 с микроконтроллером. Информация не является конфиденциальной или защищенной. Все процессы (приложение и шпионы) могут запускаться от имени пользователя root.