Как отправить вывод с одного терминала на другой, не создавая новый канал или файл

Как отправить вывод с одного терминала на другой, не создавая новый канал или файл

Я просто балуюсь на своем терминале (терминал 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}

Связанный контент