デフォルトでは、標準ファイル記述子<= 2を開きます。プログラムは、open
これらの記述子を取得するためにシステムコールを使用せずに、2以降のファイル記述子に書き込みまたは読み取ることができます。これにより、プログラムはどのファイル記述子をどのように使用しているかをマニュアルに公開できます。これを利用するために、POSIXシェルはファイルを開き、組み込み記述子を持つ記述子exec
にファイルを割り当てることができます。その後、シェルはその記述子とファイルを使用するプログラムを起動します。
これを行う1つの理由は、プログラムが複数の出力ファイルまたは入力ファイルを望んでいるが、それをコマンドライン引数として指定したくない場合です。ファイルが1つしかない場合は、標準のファイル記述子をリダイレクトできます。
私は通常、利用可能なプログラムのマニュアルでそのようなコンテンツを宣伝することを見たことがありません。実際にこのようなことが起こりますか?そんな話を聞いた人はいますか?
はい、私はPOSIXの世界に滞在したいと思います。したがって、bash専用の組み込み機能はありません。組み込みシェルの代わりにそのようなプログラムがあるかどうか疑問に思います。
ベストアンサー1
<(...)
プロセス置換のためにorを使用すると、>(...)
bashは任意の高ファイル記述子で別のプログラムのパイプを開き(以前は10から計算を開始しましたが、今は63から計算を開始すると思います)、コマンドライン/dev/fd/N
に従って名前を渡します。最初のプログラムです。これはPOSIXではありませんが、他のシェルでサポートされています(ksh88機能)。
しかし、それはあなたが実行しているプログラムが正確に行うことではなく、単にそれを見て/dev/fd/N
通常のファイルのように開こうとするだけです。
Autoconf マニュアルいくつかの歴史を参照してください:
一部の古いシステムでは、いくつかのファイル記述子が残っています。通常、
/dev/tty
Unixバージョン8(1985)〜10(1989)にログインすると、ファイルディスクリプタ3が開きます。ファイル記述子4はStardent / Kubota Titan(1990年頃)で特別な目的を持っていましたが、今はそれが何であるか覚えていません。どちらのシステムも廃止されたため、ファイルディスクリプタ3と4を他のファイルディスクリプタと同じように安全に処理できるようになりました。また、私がこれを検索したときというツールを見つけました。
runit
ファイル記述子4および5は、ログの回転に関連する特定の目的に使用される。svlogd
そしてマニュアルページを引用してみましょう:svlogd
最新のログファイルを処理するように求められたら(...)。svlogd
プロセッサがファイルディスクリプタ5に書き込んだすべての出力は、プロセッサが次のログファイルローテーションで実行されると、ファイルディスクリプタ4に保存され使用可能になります。