STDIN、STDOUTなどに関連するファイル記述子を識別する方法

STDIN、STDOUTなどに関連するファイル記述子を識別する方法

私はこれを知らせるいくつかのコマンドや環境変数を覚えているようです。たとえば、私は基本的に端末で何かを実行したいと思います。

echo $STDIN 
/dev/tty
echo $STDOUT
/dev/tty
fdescribe 0 or fdescribe /dev/stdin
/dev/tty
fdescribe 1 or fdescribe /dev/stdout
/dev/tty

ただし、スクリプトまたはサブプロセスで実行できます。

答え1

さて、定義によると、fd 0はstdinに関連付けられ、fd 1はstdoutに関連付けられます。

何か知りたいなら文書(Bourneのような、またはcshのような)シェルでこれらのfdを開くには、次のようにします。

lsof -ap "$$" -d 0-1

LinuxまたはCygwinでは、以下も参照してください。

realpath /dev/stdin /dev/stdout

出力はソケットやパイプですが、ほとんど使用されません。

もう一度Linuxでtoを追加すると、-E特定のlsof種類のファイル(パイプ、疑似tty、または特定のソケットなど)にもう一方の端にあるもの(ある場合)に関する追加情報を提供できます。

最新バージョンには、次の情報を提供するユーティリティ(Linuxのみ)util-linuxもあります。lsfdlsof

lsfd -p "$$" -Q '(fd == 0) or (fd == 1)'

または

lsfd -p "$$" -Q 'assoc =~ "^[01]$"'

¹rcに似たシェルでは、andの$pid代わりに次のものを使用してください。$$fish$fish_pid

関連情報