新しいパイプやファイルを作成せずに、ある端末から別の端末に出力を送信する方法

新しいパイプやファイルを作成せずに、ある端末から別の端末に出力を送信する方法

私はただ自分の端末 (Gnome 端末) で遊んでいるだけです。新しいファイルやパイプを作成せずに、ある端末の出力を別の端末に送信する方法はあるのだろうかと思いました。

たとえば、最初の端末で実行しls、その出力を2番目の端末に表示したい(2番目の端末でコマンドを使用するかどうかは関係ありません)

答え1

両方の端末が同じユーザーに属している場合は、特定の端末の tty として使用されている仮想デバイスに出力を送信できます。

wしたがって、TTY 情報を含むからの出力を使用して、そのデバイスに直接書き込むことができます。

ls > /dev/pts/7

(言及されているデバイスがwpts/7の場合)

もう 1 つのオプションは、そのデバイスに接続されているプロセスの番号を使用することです。出力を に送信します/proc/<process number>/fd/1

ls > /proc/5555/fd/1

その端末で実行されているプロセス番号が 5555 であると仮定します。

この直接書き込みは、以下の場合にのみ許可されます。書き込みを試みるユーザーは、他の端末を所有するユーザーと同じである

答え2

コマンドを使用できますwrite

@MelBurslan がコメントしたように、書き込み権限がオフの場合は、まず次を実行します。

 $ mesg y

からman mesg

オプション

y 端末への書き込みアクセスを許可します。

write の使い方:

$ 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>

2番目のターミナル:

$ ls > /dev/pts/0

最初の端末に出力が表示されます

答え4

端末の TTY に書き込むことができます。たとえば、次のようになります。

ターミナル1:

$ tty 
ttys000

ターミナル2:

$ tty
ttys029

$ exec &> >(tee >(cat >&/dev/ttys000))
ls 

入力中でも、出力は両方の端末にリアルタイムで表示されます。

LinuxとmacOSで動作します。macOSのTTYパスは/dev/{number}Linuxでは/dev/pts/{number}

関連情報