私は自分の端末(Gnome端末)をだましています。新しいファイルやパイプを作成せずに、ある端末の出力を別の端末に送信する方法があるのではないかと思っていました。
例:最初の端末で実行しls
、その出力を2番目の端末に表示したい(2番目のコマンドを使用して、または使用せずに)
ls
、その出力を2番目の端末に表示する(2番目のコマンドを使用するかどうかにかかわらず)
私は自分の端末(Gnome端末)をだましています。新しいファイルやパイプを作成せずに、ある端末の出力を別の端末に送信する方法があるのではないかと思っていました。
例:最初の端末で実行しls
、その出力を2番目の端末に表示したい(2番目のコマンドを使用して、または使用せずに)
ls
、その出力を2番目の端末に表示する(2番目のコマンドを使用するかどうかにかかわらず)
回答:
両方の端末が同じユーザーに属している場合、特定の端末のttyとして使用される仮想デバイスに出力を送信できます。
したがってw
、TTY情報を含むからの出力を使用して、そのデバイスに直接書き込むことができます。
ls > /dev/pts/7
(言及されたデバイスw
がpts / 7であった場合)
別のオプションは、そのデバイスに接続されているプロセスの番号を使用することです。出力をに送信します/proc/<process number>/fd/1
。
ls > /proc/5555/fd/1
その端末で実行されるプロセス番号が5555であると仮定します。
この直接書き込みは、書き込みを試みるユーザーが他の端末を所有しているユーザーと同じ場合にのみ許可されることに注意してください。
/dev/pts/7
はw
コマンドを取得したり、似たりはしませんが、2番目の方法はうまくいきます
/proc/XXX/fd/1
は、一般にベースデバイスへのソフトリンクです。使用ls -l /proc/XXXX/fd/1
してみて、それが指しているものを確認してください。w
コマンドに現れたものと関係がありますか?
w
し、コマンドを/proc/XXX/fd/0
、私は関連していw
て、コマンドを/dev/pts/7
/proc/XXX/fd/1
、w
コマンドが表示するデバイスへのソフトリンクであると想定されるように接続されていると言っています。その上での出力は何ls -l
ですか?
tty
(現在のみ)またはwho
(すべて)からの出力にもあります。
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
w
コマンドの出力があり、edward tty2 19:53 6:05 2:48 23.12s firefox
書き込みls | write edward tty2
を行うと、ビープ音だけが出力されます
edwardd
代わりにタイプしたものをリリースしました edward
か?
you have turned write permission off
mesg y
コマンドを実行する前にターゲット端末でコマンドを試してください
同様の方法を見つけました。
最初のターミナルで:
$ tty
/dev/pts/0
$ <no need to run any command here, just see the output>
2番目の端末:
$ ls > /dev/pts/0
これで、最初の端末で出力が得られます
tail -f
代わりにcat
役立つ可能性があります
tty
各ターミナルでコマンドを使用して、それらを識別します。
$ tty
/dev/pts/0
$ tty
/dev/pts/1
これらのTTYを想定して、最初の標準出力を2番目にリダイレクトするには、最初の端末でこれを実行します。
exec 1>/dev/pts/1
注:これで、すべてのコマンド出力がpts / 1に表示されます。
pts / 0のデフォルトの動作stdoutを復元するには:
exec 1>/dev/pts/0
デモについては、このビデオを参照してください。
端末のTTYに書き込むことができます。例えば:
ターミナル1で:
$ tty
ttys000
ターミナル2で:
$ tty
ttys029
$ exec &> >(tee >(cat >&/dev/ttys000))
ls
入力しても、出力は両方の端末にリアルタイムで表示されます。
LinuxおよびmacOSで動作します。macOS TTYパスは/dev/{number}
Linuxでは/dev/pts/{number}
exec &> >(tee >(cat >&/dev/ttys000))
は存在しないため、入力できません。
tty
次のようになります/dev/pts/0
exec &> >(tee >(cat >&/dev/pts/1))
。コントロールキーの組み合わせ(ctrl + c)は機能しません。終了するにはターミナルを殺さなければなりません
以下wall
も使用できます。
$ wall "Message here"
wall
(「すべて書き込み」の略)。代わりに、を使用write
すると、特定のttyを宣言できます。