エクスポートされた環境変数が子シェル (bash) によって認識/アクセスされるのを防ぐにはどうすればよいですか?

エクスポートされた環境変数が子シェル (bash) によって認識/アクセスされるのを防ぐにはどうすればよいですか?

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

問題は、アプリケーション (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は空の環境で実行されます。 の後に引数を置くことができますsomecommandPATHが消去された場合は、 へのフルパスを指定する必要がありますsomecommand。 または、別の値を保持または設定することもできますPATH

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

ログイン後と同じ環境を維持したい場合は、いくつかの変数だけを保存し、 をロードして残りを設定します。別のログイン シェル ( を使用した bash 、 を使用した cshなど).profileを使用する場合は、それに応じて調整してください。.bash_profile.login

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

あるいは、環境からいくつかの変数を削除することもできます。 は、環境からと をenv -u VAR1 -u VAR2 somecommand削除し、 を実行します。 Linux では、 を使用して、フィルタリングに適した 1 行に 1 つの名前を持つ環境変数のリストを生成できます。 他の Unix バリアントでは、 は同じ機能を実行しますが、一部の変数の値に改行が含まれている場合に誤検出が発生する可能性があるという制限があります。VAR1VAR2somecommandenv -0 | tr '\n\0' '.\n' | sed 's/=.*//'env | sed 's/=.*//'

答え3

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

関連情報