Bashのクリーンな環境でプログラムを実行するには?

Bashのクリーンな環境でプログラムを実行するには?

空の環境(つまり、変数が設定されていない)でプログラムを実行したいと思います。バッシュではどうしますか?

答え1

次の方法でこれを実行できますenv

env -i your_command

以下のコメントとは異なり、する環境を完全に消去しますが、your_command新しい変数が設定されるのを防ぎません。特に、シェルを実行するとシェルも/etc/profile実行され、シェルにはいくつかの組み込み設定がある場合があります。

以下で確認できます。

env -i env

つまり、環境を拭いてから印刷してください。出力は空です。

答え2

bash「きれいな」環境を持つことができます

$ env -i bash --noprofile --norc
  • このenv -iコマンドは、以前のシェル環境のエクスポートされた環境変数をランチャーの環境に転送せずに、コマンドラインから指定されたコマンドを実行します。

  • この--noprofileオプションは、bashログインシェルから読み取ることができるシステム全体またはプライベートシェル初期化スクリプトの読み取りを停止します。

  • この--norcオプションは、bash対話型シェルから読み取ることができるプライベートシェル初期化スクリプトの読み取りを停止します。

答え3

env -i somecommand次の空の環境でコマンドを実行します。amsはすでに言及しています

多くのプログラムはいくつかの重要な環境変数に依存しているので、それを保存することをお勧めします。

env -i HOME="$HOME" LC_CTYPE="${LC_ALL:-${LC_CTYPE:-$LANG}}" PATH="$PATH" USER="$USER" somecommand

または、小規模なログイン時間環境にログインできます。

ssh localhost somecommand

答え4

ここにあるほとんどの回答の問題はenv -i解決されるHOMEため、内部的に実行しても背面をbash -l読みません。.bash_profile探しているのが新しいログインを完了したかのようにシェルの場合は、次のようにします。

env -i HOME="$HOME" bash -l -c 'your_command'

例:

$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123

関連情報