
Я просто балуюсь на своем терминале (терминал Gnome). Мне было интересно, есть ли способ отправить вывод одного терминала на другой без необходимости создания нового файла или канала.
например: на первом терминале я запускаю ls
и хочу, чтобы его вывод отображался на втором терминале (с использованием или без использования какой-либо команды на втором терминале)
решение1
Если оба терминала принадлежат одному и тому же пользователю, вы можете отправить вывод на виртуальное устройство, которое используется в качестве tty конкретного терминала.
Таким образом, вы можете использовать выходные данные w
, которые включают информацию TTY, и писать напрямую на это устройство.
ls > /dev/pts/7
(Если устройство, упомянутое пользователем, w
было pts/7)
Другой вариант — использовать номер процесса, подключенного к этому устройству. Отправьте свой вывод на /proc/<process number>/fd/1
.
ls > /proc/5555/fd/1
Предположим, что номер процесса, который вы обнаружили и который запущен в этом терминале, — 5555.
Обратите внимание, что эта прямая запись разрешена только еслипользователь, который пытается писать, является тем же пользователем, которому принадлежит другой терминал.
решение2
Вы можете использовать write
команду.
Как прокомментировал @MelBurslan, если разрешение на запись отключено, сначала выполните:
$ mesg y
Отman mesg
ПАРАМЕТРЫ
y Разрешите доступ на запись к вашему терминалу.
Использование записи:
$ write username tty
например, отправить ls
вывод на другой терминал.
$ w
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user :0 :0 08:15 ?xdm? 7:37 0.25s init --user
user pts/0 :0 08:19 1.00s 0.09s 0.01s w
user pts/12 :0 08:50 54.00s 0.03s 0.03s bash
$ ls | write username pts/12
решение3
Я нашел похожий метод.
На первом терминале:
$ tty
/dev/pts/0
$ <no need to run any command here, just see the output>
На втором терминале:
$ ls > /dev/pts/0
Теперь вы получаете вывод на первом терминале
решение4
вы можете написать на TTY терминала, например:
в терминале 1:
$ tty
ttys000
в терминале 2:
$ tty
ttys029
$ exec &> >(tee >(cat >&/dev/ttys000))
ls
Вывод будет отображаться на обоих терминалах в режиме реального времени, даже по мере ввода текста.
Работает на Linux и MacOS. Путь TTY в MacOS — это, /dev/{number}
а в Linux — это/dev/pts/{number}