スクリプトの実行中にのみ環境変数を設定するにはどうすればよいですか?


127

Linux(Ubuntu 11.04)でbashを使用している場合、スクリプトの実行中に通常の変数とのみ異なる環境変数を一時的に設定することはできますか?たとえば、シェルスクリプトで、HOMEに保存するアプリを一時的にHOMEを現在の作業ディレクトリのフォルダーに設定し、アプリを起動することでポータブルにします。


5
スクリプトの期間を超えて設定を持続させる場合は、より困難になります
Nemo

回答:


119
VAR1=value1 VAR2=value2 myScript args ...

2
私はこれを自分で何度も実行しましたvblank_mode=0 glxgears。動作しますが、vblank_mode=0: command not found実行後にも表示されますが、先頭に追加envしてもこれは発生しません。[テスト中...]どうやらzshは気に入らない(まだ正しく使用している)ようですが、bashは問題ありません。これからはこのenv方法でいくと思います。
Chinoto Vokro 16年

2
スクリプトで動作しますが、 VAR1="hello" echo $VAR1何も返されませんか?
ジブリ

2
@ジブリそれは拡張が起こっているときについてです。おそらくあなたはそのようなことをすることができます:VAR1="hello" bash -c 'echo $VAR1'
cybergrind

これが複数の環境変数でも可能であることを示すことに賛成。
Binarus

70
env VAR=value myScript args ...

18
またはVAR=value myScript args ...
Rockallite 2014年

9
1. PATH=$PATH:XYZ echo $PATH | grep XYZしかし、何の出力もないのはなぜですか?2.使用することと使用しないことの違いは何envですか?
qubodup 2015年

18
シェルは、echoコマンドを実行する前に PATH変数を展開するためです。その拡張を遅らせる必要があります。1つの方法:PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ-ここでは単一引用符が鍵となります
グレンジャックマン、2015年

14
envそれを使用することと使用しないことの違いは何ですか?
Mohammed Noureldin

これは次のようなワンライナーでは機能しないようですIFS=$'\n' for l in lines; do ... done
drevicko '

31

置くだけ

export HOME=/blah/whatever

変更を加えたいスクリプトの時点。各プロセスには独自の環境変数のセットがあるため、スクリプトが終了すると、この定義は自動的に意味を持ちなくなります(それに伴い、環境が変更されたbashのインスタンスも)。


11
それは誤解を招くものです。export変数をサブシェルに渡しますが、それは親シェルを制御しません。「#!/ bin / sh」などで始まるスクリプトを記述している場合、設定した変数はスクリプトが終了すると消えます。
ブライトランサー2011

1
@brightlancer、それは本当ですが、私が書いたものと矛盾していないようです。(スクリプトがバックグラウンドプロセスを開始する可能性を除いて、それはOPの高度なレベルを超えており、混乱するだけだと思います)。
hmakholmがモニカに残った

5
エクスポートは不要です。また、あなたの答えは、彼のスクリプトがインタープリター(#!/ bin / shなど)を呼び出す場合にのみ機能します。彼の「スクリプト」がそうでない場合、あなたが彼に言ったばかりのことは彼のスクリプトの終わりを超えて持続します。だから私はあなたの答えが誤解を招くものだと言った-それは正しいかもしれないしそうでないかもしれないが、それは誰かが「エクスポート」が彼が探していた必要な要素であると考えるようにさせるかもしれないので不必要で混乱している部分を確実に持っている。
ブライトランサー2011

7
@brightlancer:OPのスクリプトが$ HOMEに依存するサブスクリプトを呼び出す場合、エクスポートが必要ですが、あえてそうはないと思い込んいます。さらに、スクリプトにシバン行がなく、実行ビットが設定された単なるテキストファイルである場合でも、bashはサブシェルを生成してスクリプトを実行します。試してみてください。スクリプト内の変数の割り当ては、それを呼び出したシェルには表示されません。sourceスクリプトを明示的に指定した場合にのみ、コマンドを入力したのと同じシェルによってスクリプトが実行されます。
hmakholmがモニカに残った2011

4
@brightlancer:$HOMEスクリプトから実行されるコマンドによって継承される場合は、エクスポートが必要です。そうでない場合で、の設定が$HOMEスクリプト自体の利益のためだけである場合は、スクリプトを変更して、以外のものを参照することをお勧めします$HOME
キーストンプソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.