web-dev-qa-db-ja.com

kshで10を超えるファイル記述子を開く

書き込み用にファイルを開いてそのファイル記述子を使用するためのシェル構文は次のとおりです。

exec 3>output.log

Bashとzshを使用すると、次のように書くこともできます。

exec 13>output.log

したがって、スクリプトの後半で、次のように出力をリダイレクトできます。

generate-partx >&3
generate-partx >&13

そしてそれらを閉じるには:

exec 3>&-
exec 13>&-

元のksh(テスト済み88および93)は、その構文でファイル記述子番号0から9のみをサポートしているようです。

確かに、10個の開いているファイル記述子ですべての人に十分である、および/または誰もkshを使用しなくなったと主張することができます。

しかし、そうでない場合もあります。

したがって、私の質問:kshスクリプトで10を超えるファイル記述子を開く方法は?

3
maxschlepzig

kshでは、明示的なファイル記述子に使用できるのは1桁のみです。 ksh93r以上では、次の形式を使用して10を超えるファイル記述子を開くことができます。

{var}>filename

bashおよびzshは後でこの機能をコピーしました)

kshは、10以上の使用可能なファイル記述子を選択し、ファイル記述子番号を変数varに格納します。

$ exec {var1}>/tmp/test1
$ echo "$var1"
10
$ exec {var2}>/tmp/test2
$ echo "$var2"
11
3
cuonglm