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


26

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

例:最初の端末で実行しls、その出力を2番目の端末に表示したい(2番目のコマンドを使用して、または使用せずに)


あなたは何を持っていますか?何か試しましたか?例を挙げていただけますか?
タコミ

最初の端末で@tachomiを実行しls、その出力を2番目の端末に表示する(2番目のコマンドを使用するかどうかにかかわらず)
エドワードトーバルズ

回答:


30

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

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

ls > /dev/pts/7

(言及されたデバイスwがpts / 7であった場合)

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

ls > /proc/5555/fd/1

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

この直接書き込みは、書き込みを試みるユーザーが他の端末を所有しているユーザーと同じ場合にのみ許可されることに注意してください。


/dev/pts/7wコマンドを取得したり、似たりはしませんが、2番目の方法はうまくいきます
エドワードトーバルズ

2
@edwardtorvalds /proc/XXX/fd/1は、一般にベースデバイスへのソフトリンクです。使用ls -l /proc/XXXX/fd/1してみて、それが指しているものを確認してください。wコマンドに現れたものと関係がありますか?
-RealSkeptic

私は関係ないですwし、コマンドを/proc/XXX/fd/0、私は関連していwて、コマンドを/dev/pts/7
エドワード・トーバルズ

4
@edwardtorvalds私は/proc/XXX/fd/1wコマンドが表示するデバイスへのソフトリンクであると想定されるように接続されていると言っています。その上での出力は何ls -lですか?
RealSkeptic

TTY情報は、tty(現在のみ)またはwho(すべて)からの出力にもあります。
ニックボリンキン

14

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

Arch Linuxのgnomeターミナルでは、wコマンドの出力があり、edward tty2 19:53 6:05 2:48 23.12s firefox書き込みls | write edward tty2を行うと、ビープ音だけが出力されます
エドワードトーバルズ

@edwardtorvaldsのedwardd代わりにタイプしたものをリリースしました edwardか?
タコミ

また、tty5(ctrl + alt + 5)で試してみるとエラーが発生しますyou have turned write permission off
エドワードトーバルズ

このサイトで入力エラーが発生した
エドワードトーバルズ

mesg yコマンドを実行する前にターゲット端末でコマンドを試してください
MelBurslan

7

同様の方法を見つけました。

最初のターミナルで

 $ tty
 /dev/pts/0
 $ <no need to run any command here, just see the output>

2番目の端末

$ ls > /dev/pts/0

これで、最初の端末で出力が得られます


1
tail -f代わりにcat役立つ可能性があります
タコミ

3
@tachomiは、実際には出力を読み取るためのコマンドは必要ありません
エドワードトーバルズ

4

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

デモについては、このビデオを参照してください。


この回答も良いです
エドワード・トーバルズ

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))は存在しないため、入力できません。
エドワード・トーバルズ

Linuxでの@EdwardTorvaldsはtty次のようになります/dev/pts/0
Miguel Mota

ええ、それは私があなたのコードをテストするために使用したものです
エドワード・トーバルズ

@EdwardTorvalds存在しないコマンドは何ですか?
ミゲルモタ

あなたのコマンドexec &> >(tee >(cat >&/dev/pts/1))。コントロールキーの組み合わせ(ctrl + c)は機能しません。終了するにはターミナルを殺さなければなりません
エドワード・トーバルズ

-3

以下wallも使用できます。

$ wall "Message here"

詳細に説明したい場合があります。これからは何もわかりません
エドワード・トーバルズ

3
送信元を含む、ログインしているすべてのttyセッションに書き込みを行うため、絶対に使用しないでくださいwall(「すべて書き込み」の略)。代わりに、を使用writeすると、特定のttyを宣言できます。
モンティハーダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.