ファイル記述子255はBashで何をしており、使用できますか?

ファイル記述子255はBashで何をしており、使用できますか?

わかりました。ファイル記述子(またはファイルハンドラ)はいファイルIOテクノロジLinuxシステムで。

また、すべてのプロセスには、0から3までの記述子を持つファイルで表される3つの標準ストリーム(つまりstdin、stdout、およびstderr)があることもわかっています。

しかし、私が確認したすべてのプロセスには、lsof -p <pid>読み取り権限を持つ追加のファイル記述子があることがわかりました。255

~からこの回答、私はこの機能が次に特定であることを学びました。バッシュシェルただし、答えや引用されたソースのいずれも、実際にこのファイル記述子が使用される用途を説明していません。

私の質問:

  1. 255 ファイル記述子の用途は?
  2. 私のBashスクリプトでこれを使用できますか?それとも手動で使用/操作してはならない内部作業メカニズムですか?

ベストアンサー1

質問の最後の部分は次のとおりです。

使えますか?

からman bash

9より大きいファイル記述子を使用するリダイレクトは、シェルで内部的に使用されるファイル記述子と競合する可能性があるため、慎重に使用する必要があります。

したがって、その番号で新しいファイル記述子を生成するという意味であれば、答えは「いいえ」です。

asを使用して「対応するfdに書き込む」を意味する場合:

$ echo hello >/dev/fd/255"

または、以下でお読みください。

$ read a </dev/fd/255
abc
$ echo "$a"
abc

答えは「はい」です。
しかし、おそらく/dev/ttyそれを使用してtty

ファイル記述子255は何に使用されますか?

/dev/stdoutfd 1()とfd 0(/dev/stdin)がブロックされている場合は、ttyへの代替接続として機能します。

詳しくは

異なるシェルでは異なる数字を使用できます(例:zshでは10)。

$ zsh
mail% ls -l /proc/self/fd /proc/$$/fd/* &
[1] 3345
mail% lrwx------ 1 isaac isaac 64 Oct 14 09:46 /proc/3250/fd/0 -> /dev/pts/2
lrwx------ 1 isaac isaac 64 Oct 14 09:50 /proc/3250/fd/1 -> /dev/pts/2
lrwx------ 1 isaac isaac 64 Oct 14 09:50 /proc/3250/fd/10 -> /dev/pts/2
lrwx------ 1 isaac isaac 64 Oct 14 09:50 /proc/3250/fd/2 -> /dev/pts/2

/proc/self/fd:
total 0
lrwx------ 1 isaac isaac 64 Oct 14 09:50 0 -> /dev/pts/2
lrwx------ 1 isaac isaac 64 Oct 14 09:50 1 -> /dev/pts/2
lrwx------ 1 isaac isaac 64 Oct 14 09:50 2 -> /dev/pts/2
lr-x------ 1 isaac isaac 64 Oct 14 09:50 3 -> /proc/3345/fd

[1]  + done       ls -l /proc/self/fd /proc/$$/fd/*
mail% 

~からメーリングリスト:

Fd 255は内部的にttyへの接続として使用されるため、execを使用してfdを再配置することは妨げられません。同じ理由で、Bashはプロセス置換 "<(foo)"を処理するときに高いfdを割り当てます。
アンドレアス・シュワップ

おすすめ記事