エクスポートされた環境変数がサブシェルで認識/アクセスされるのを防ぐ方法は?

エクスポートされた環境変数がサブシェルで認識/アクセスされるのを防ぐ方法は?

したがって、サブシェルがエクスポートされた変数のロードを認識しないようにする必要があります。

問題は、アプリケーション(Wine + UDK)が環境に多すぎる(> 65535)バイトのプロジェクトを構築しないことです。そしてbash間で環境変数を共有するプロジェクト(ScriptEchoColor)を使用した後、私のプロジェクトは多くの(95323)バイトシェルです。

現在の環境変数を許可せず、代わりに私のユーザープロファイルとシステム全体で設定された変数のみを使用するサブシェルを生成できるコマンドが見つかりません。

私は図のように多くのオプションを試しましたbash --help

答え1

このenvコマンドを使用して、クリーンな環境でプロセスを開始できます。例は次のとおりです。

env -i /bin/myprog

それでもいくつかの変数をエクスポートする必要がある場合は、呼び出し中に次のことができます。

env -i MYVAR=foo /bin/myprog

envコマンドが必要ですPOSIX

答え2

env -i somecommandsomecommand空の環境で実行してください。後でパラメータを入れることができますsomecommand。削除された場合は、PATHフルパスを指定する必要がありますsomecommandPATHあるいは、他の値を維持または設定することもできます。

env -i PATH="$PATH:/another/directory" somecommand

ログイン後と同じ環境が必要な場合は、いくつかの変数を残して変数をロードして.profile残りを設定します。他のログインシェル(bash対.bash_profilecsh.loginなど)を使用している場合は、それに合わせて調整してください。

env -i HOME="$HOME" PATH=/usr/local/bin:/usr/bin:/bin USER="$USER" \
    sh -c '. ~/.profile; "$@"' _ somecommand

あるいは、環境からいくつかの変数を削除することをお勧めします。環境からのenv -u VAR1 -u VAR2 somecommand削除と実行VAR1Linux では、フィルタリングに適した 1 行に 1 つの名前で環境変数のリストを生成するために使用できます。他のUNIXバリアントでも同じことを行いますが、一部の変数の値に改行文字が含まれている場合は偽の肯定を見つけることができるという制限があります。VAR2somecommandenv -0 | tr '\n\0' '.\n' | sed 's/=.*//'env | sed 's/=.*//'

答え3

問題typeset +x variable_name...またはdeclare +x variable_name...コマンド。などの正規表現を変数名として使用することもできますtypeset +x ${!MY_VAR_*}

関連情報