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