変数ファイル記述子を使用して実行

変数ファイル記述子を使用して実行

これが不可能な理由は何ですか、それを解決するための最良の方法は何ですか?

#!/bin/sh
desc=5; file=/etc/passwd
exec "$desc"<"$file" #the variable filedescriptor is the problem

私はむしろしませんeval

ベストアンサー1

まあ、なぜこれができないのかについては、次のようにしたくありません。

echo "$text">file

$x数値の場合、動作は停止します。

以下を行う必要があります。

eval 'exec '"$desc"'< "$file"'

シェルにexec 5< "$file"コードを評価させます。eval引数で拡張する必要がある部分だけを慎重に拡張する限り(そしてこれらの拡張は安全です)(ここでは、を除くすべての項目に二重引用符を使用してください$desc)。間違いは、eval "exec $desc< $file"シェルに提供された内容をシェルコードとして評価することです。$file

Passを使用すると、モジュールの組み込み関数をzsh使用することもできます。sysopenzsh/system

zmodload zsh/system
sysopen -u "$desc" -r -- "$file"

一緒zshにするbashksh93

exec {desc}>&-

次に保存したfdを閉じることが$descできます。

exec {desc}> file

シェルは10より大きいfdを割り当て、分配するはい。これは事前に保存されたfdを$desc開くためには使用できません。file$desc

これはexec >&"$desc"あいまいさがないので動作することに注意してください。zsh最新バージョンでは、stdoutとstderrをファイル(たとえば)にリダイレクトし、数値でない場合にのみ機能する演算子があることをbash除いてください。>&cshecho something >& "$file"$file

おすすめ記事