制御端末の本名を取得するにはどうすればよいですか?
制御端末の実際の名前(ある場合はエラー)をパス名として取得するにはどうすればよいですか? 「本名」とは、を意味/dev/ttyし、同じ端末を参照するために他の任意のプロセスで使用することはできません。可能な場合は、単純なシェルコード(以下の例のような)として、そうでない場合はC関数として、答えを好みます。 これは、標準入力がリダイレクトされても機能する必要があるので、ttyユーティリティを使用できないことに注意してください。標準入力に接続された端末のファイル名を出力するだけなnot a ttyので、このような場合はエラーにttyなります。 Linuxでは、以下を使用できます。 echo "/dev/`ps -p $$ -o tty | tail -n 1`" しかし、これは移植性がありません。POSIXによると、端末名の形式は指定されていません。 C関数に関してctermid (NULL)は/dev/tty、ここでは役に立たないを返します。 注:zshドキュメントによれば、 zsh -c 'echo $TTY' しかし、現在(バージョン5.0.7)は、標準入力と標準出力の両方がリダイレクトされると失敗します。 $ zsh -c 'echo $TTY > /dev/tty' < /dev/null /dev/pts/9 $ zsh -c 'echo $TTY > /dev/tty' < /dev/null > /dev/null /dev/tty