他のbashスクリプトの設定ファイルとして機能するbashスクリプトがあるとします。
構成.sh:
verbose=yes
echo "Malicious code!"
name=test
スクリプト.sh:
source config.sh
echo "After sourcing: verbose='$verbose', name='$name'"
問題は、config.shに入れたすべてのエントリが実行されるため、これは非常に安全ではないことです。
$ ./script.sh
Malicious code!
After sourcing: verbose='yes', name='test'
より安全にするために、割り当てタスクを整理し、そのタスクだけを実行する必要があると思いました。source
「ここに文書」を渡してこれを行います。
スクリプト.sh:
source <<EOF
$(grep -P '^\s*\w+=' test.sh)
EOF
echo "After sourcing: verbose='$verbose', name='$name'"
(はい、正規表現はそれほど強力ではありません。私はプレースホルダーにすぎません。)残念ながら、ソースコードはここのドキュメントとうまく機能しないようです。
./script.sh: line 1: source: filename argument required
source: usage: source filename [arguments]
After sourcing: verbose='', name=''
明らかに、ファイルから構成データをインポートするためにできることはたくさんありますが、とにかくそれはより安全です。
しかし、私にはまだ恐れが残っていました。私がしたいことがうまくいくかどうかを知りたかったです。どんな提案がありますか?
ベストアンサー1
source <(cat << EOF
A=42
EOF
)
echo $A
出力:
42