1

後続のバイナリで使用される環境変数を変更する単純な 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

4

1 に答える 1

4

それはあなたが使用しているかなり古いソフトウェアです。

試してみることをお勧めします:

su -c "DBROOT='NEW_DIRECTORY' TERM='xterm' <test_process> " - omni

これにより、環境のリレーにsu依存するのではなく、環境設定が によって実行されるシェルに移動します。su

于 2014-10-21T15:47:40.067 に答える