Shellshock bashの修復はechoやcatのような基本的なコマンドラインツールを壊しますか? [コピー]

Shellshock bashの修復はechoやcatのような基本的なコマンドラインツールを壊しますか? [コピー]

私は次のことができました:

X=123 cat <<EOF
X is $X
EOF

はるかに簡単です。

X=123 echo $X

bashの修正をインストールした後でも、最初の修正はまだMac OS Xで動作するようですが、AWSのUbuntu 14.04インスタンスでは動作しなくなったようです。これらの環境変数にアクセスできechoなくcatなったのはなぜですか?もう1つのことは、NodeJSアプリケーションに環境変数を渡すときに問題がないようです。

cat <<EOF > test.js
console.log('X is ' + process.env.X);
EOF
X=123 node test.js

これはbashスクリプトでも動作するようです。

cat <<EOF > test.sh
echo X is \$X
EOF
chmod +x test.sh
X=123 ./test.sh

ベストアンサー1

POSIXシェルで以下を作成するとき

X=123 echo $X

$Xコマンド全体を実行する前に拡張されます。つまり、最初に設定されていない場合は、次のように$Xなります。

X=123 echo

次に実行します。シェルが実行する操作をおおよそ見ることができますset -x

$ set -x
$ X=123 echo X=$X
+ X=123
+ echo X=
X=
$ set +x

環境に引き続きアクセスできることを確認できますecho(実際に実行する前に拡張されるシェル自体)。echo

$ X=123 eval 'echo $X'
123

問題はcat <<EOF似ています。関連して、以前のbashバージョン(4.1より前)には、CHANGESドキュメントに次のようなバグがあります。

ここでは、ドキュメントの変数が一時的な環境で見えるように拡張されるバグを修正しました。

これがMac OS Xで観察される動作の理由かもしれません。このエラーに頼らないでください。

おすすめ記事