-
man tty
からtty –標準入力に接続されている端末のファイル名を出力します
$ tty /dev/pts/2
-
APUEから:
歴史的に、UNIXシステムのほとんどのバージョンでの制御端末の名前は
/dev/tty
でした。 。 POSIX.1は、制御端末の名前を判別するために呼び出すことができる
ランタイム
関数を提供します。#include <stdio.h> char *ctermid(char *ptr);
$ ls -la /dev/tty crw-rw-rw- 1 root tty 5, 0 May 26 00:16 /dev/tty
だから私はコマンドtty
の出力かどうか疑問に思いました およびファイル/dev/tty
どちらも現在のbashプロセスの制御端末を指しますか?
はいの場合、なぜコマンドtty
疑似端末スレーブファイルを出力します/dev/pts/2
、これは/dev/tty
とは異なります ?
ターミナルエミュレータlxterminal
以降 その中で実行されているbashシェルは、疑似端末ペアを使用します。これは、疑似端末スレーブ/dev/pts/2
ではありません。 bashシェルの制御端末?
/dev/tty
および/dev/pts/2
相互にシンボリックリンクではないので、異なるファイルですか?
ありがとう。
フォローアップ投稿私の現在の制御端末と`/dev / tty`の間にはどのような関係がありますか?
承認された回答:
コマンドtty
(1)標準入力に接続されている端末の名前を返します。これは制御端末である場合とそうでない場合があります。プロセスには制御端子がある場合もありますが、その端子を標準入力に接続する必要があることは石で書かれていません。
tty
のPOSIXマニュアルページから (1):
ttyユーティリティは、標準入力として開いている端末の名前を標準出力に書き込みます。使用される名前は、
ttyname()
によって返される文字列と同等でなければなりません。 POSIX.1‐2008のシステムインターフェイスボリュームで定義されている関数。
自分で試してみてください。実行
< /dev/null sh -c 'tty; sleep 10; echo "Done."'
tty
によって書き出された「notatty」というメッセージが表示されたら、Ctrl+Cを押します。 標準入力は(疑似)端末ではないためです。
一方、/dev/tty
プロセスが実際に持っているという条件で、は常にプロセスの制御端末の同義語です。 制御端末。