Bash で、最も小さい番号の未使用のファイル記述子を見つけるにはどうすればよいでしょうか? 質問する

Bash で、最も小さい番号の未使用のファイル記述子を見つけるにはどうすればよいでしょうか? 質問する

Bash スクリプトでは、「まだ使用されていない最も小さい番号のファイル記述子」でファイルを開くことは可能ですか?

これを実行する方法を調べてみたのですが、Bash では常に次のように数値を指定する必要があるようです。

exec 3< /path/to/a/file    # Open file for reading on file descriptor 3.

対照的に、私は次のようなことができるようになりたいです

my_file_descriptor=$(open_r /path/to/a/file)

これは、まだ使用されていない最も小さい番号のファイル記述子で読み取り用に 'file' を開き、その番号を変数 'my_file_descriptor' に割り当てます。

ベストアンサー1

このスレッドは古いことは承知していますが、最善の答えが見つかっていないと思います。私のように解決策を探しにここに来た他の人にも役立つと思います。

Bash と Zsh には、スクリプトを書かなくても未使用のファイル記述子を見つける方法が組み込まれています。(dash ではそのような方法は見つかりませんでしたので、他の回答がまだ役立つかもしれません。)

注: これは、10を超える未使用のファイル記述子の最小値を検索します。最低全体。

$ man bash /^REDIRECTION (paragraph 2)
$ man zshmisc /^OPENING FILE DESCRIPTORS

例は bsh および zsh で動作します。

未使用のファイル記述子を開き、その番号を $FD に割り当てます。

$ exec {FD}>test.txt
$ echo line 1 >&$FD
$ echo line 2 >&$FD
$ cat test.txt
line 1
line 2
$ echo $FD
10  # this number will vary

完了したらファイル記述子を閉じます。

$ exec {FD}>&-

以下は、ファイル記述子が閉じられていることを示しています。

$ echo line 3 >&$FD
bash: $FD: Bad file descriptor
zsh: 10: bad file descriptor

おすすめ記事