環境変数なしでシェルスクリプトを実行する


17

私が知っているように、新しく実行されるシェルスクリプトは環境変数を継承します。これをブロックする方法はありますか?(変数を継承せずにシェルを実行)

回答:


21

スクリプトをenv -i実行する前に環境をクリアするように、スクリプトにプレフィックスを付けることができるようです:

env -i sh test.sh

からman env

-i, --ignore-environment
              start with an empty environment

なぜあなたはこれをしたいのか分かりません...


ありがとう。これはうまくいきました!IDEの構成環境変数に影響を与えずにIDEでビルドスクリプトを呼び出すためにこれが必要です。しかし、目標にはまだ遠い。これはあなたの好奇心を助けるかもしれません!
エオニル

別のユースケースを追加するには:現在、bashの代替としてfishとzshを評価しています。しかし、私はログインシェルとして候補シェルを昇格する準備ができていません(例:chsh ...ターミナルウィンドウを開いて実行するzshか、fish-l問題の有無にかかわらず)、環境のあらゆる種類の変数を汚染します私はそれを開始したシェルとトリックを行う。env -c私のために解き、この問題を私がやる。env -i TERM=xterm-256color $(which fish)
Paidhi

これは、環境が適切に構成されておらず、テストする必要があるために失敗するcronタスクがある場合に役立ちます。また、スクリプトが環境設定について推測を行うかどうかをテストするための良い方法です。ありがとう!
2013

これが役立つ可能性のある別の場所は、定期的なジョブ(cronジョブなど)をテストして、スクリプトに環境依存性がないことを確認することです。パペットマニフェストの「Exec」リソースで実行されるコマンドについても同様です。
TommyTheKid

1

1つの可能性(かなりいように見えますが):

exec -c $SCRIPT空の環境で$ SCRIPTを開始します。(のman bash検索を参照してくださいexec \[-cl\])。


1
これはenv -iとほぼ同じように機能しましたが、execは残りのスクリプトの実行を停止するため、env -iを使用することを選択しました。
エオニル

-1

私の知る限り、答えは「いいえ」です。スクリプト自体の中で環境変数をオーバーライドできます。スクリプトの実行が完了したら、環境変数の値を元の値に戻す必要があります。環境変数を元の値にリセットするためにスクリプトを1回実行するたびにシェルからログアウトする必要がないように、おそらく子プロセスとしてスクリプトを実行する必要があります:$ this.script.sh&

編集:

以前のポスターから、それが不可能であることについて私は間違っているように思われます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.