~から
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シェルは疑似ターミナルペアを使用するので、疑似ターミナルスレーブはbash/dev/pts/2
シェルのコントロールターミナルではありませんか?
/dev/tty
/dev/pts/2
互いにシンボリックリンクではないので、異なるファイルですか?
ありがとうございます。
フォローアップ投稿現在の制御端末と `/dev/tty`の関係は何ですか?
ベストアンサー1
コマンドtty
(1) は、標準入力に接続された端末の名前を返します。これは制御端末であってもなくてもよい。プロセスに制御端末があるかもしれませんが、端末が標準入力に接続する必要があることはわかりません。
POSIXではtty
(1)のマニュアルページ:
ttyユーティリティは、標準入力で開かれた端末の名前を標準出力に書き込む必要があります。使用される名前は、
ttyname()
POSIX.1-2008システムインタフェースボリュームで定義されている関数によって返された文字列と同じでなければなりません。
自分で試してみてください。
< /dev/null sh -c 'tty; sleep 10; echo "Done."'
tty
stdinは(擬似)端末ではないので、「not a tty」というメッセージを見た後、Ctrl + Cを押してください。
一方、は/dev/tty
常にプロセスの制御端末と同義です。ただし、プロセスが実際に持つ制御端末