後続のバイナリで使用される環境変数を変更する単純な bash スクリプトがあります。私の基本的なスクリプトを以下に示します。
#!/bin/bash
export DBROOT="NEW_DIRECTORY"
export TERM=xterm
su -c " <test_process> " - omni
DBROOT 変数は、「test_process」によって環境変数として使用されます。また、DBROOT はグローバル環境変数として別の値「OLD_DIRECTORY」で定義されています。スクリプトの目的は、「test_process」に NEW_DIRECTORY 値 (エクスポートされた値) を使用させることです。
パッチが適用されていない bash バージョンでは、テストは機能しました。ただし、bash の shellshock バグにパッチを適用した後、test_process はエクスポートされた DBROOT の値もグローバル環境変数も読み取りません。「test_process」がエクスポートされたグローバル変数を無視するかのようです。
「test_process」のソースコードがありません。bash のバージョンはバージョン 2.05b.0(1)-release (rpm のバージョンは bash-2.05b-41.7.i386.rpm ) で、Red Hat Enterprise Linux AS リリース 3で実行しています。
更新: コンパイル時の定義を設定して、bash 2.05b の最後のソースを再コンパイルした後
#define NON_INTERACTIVE_LOGIN_SHELLS
スクリプトは再び機能しました。このdefine bashがないと、コマンドの-
後の文字が誤って解釈されましたsu