2011-08-19 10 views
62

bashのLinux(Ubuntu 11.04)では、スクリプトの実行中に通常の変数と異なるだけの環境変数を一時的に設定できますか?例えば、シェルスクリプトでHOMEを現在の作業ディレクトリのフォルダに一時的に設定してから、ポータブルに保存するアプリケーションを作成してから、アプリケーションを起動します。スクリプトの実行中にのみ環境変数を設定する方法はありますか?

+4

あなたは誤解だスクリプト – Nemo

答えて

15

はちょうどあなたが変更が発生するスクリプトのポイントで

export HOME=/blah/whatever 

を置きます。各プロセスには独自の環境変数セットがあるため、この定義はスクリプトが終了すると自動的に中止されます(変更された環境を持つbashのインスタンスとともに)。

+3

の期間_beyond_最後に設定を望んでいた場合、それは難しいだろう。 'export'は変数をサブシェルに渡しますが、親シェルを制御しません。 "#!/ bin/sh"などで始まるスクリプトを作成している場合は、スクリプトが終了するとANY変数が消えます。 – brightlancer

+0

@brightlancer、それは本当ですが、私が書いたものと矛盾するようには見えません。 (スクリプトがバックグラウンドプロセスを開始する可能性を除いては、OPの洗練されたレベルを超えていると思うので混乱するだけです)。 –

+3

エクスポートは不要です。また、彼のスクリプトがインタプリタ(#!/ bin/shなど)を起動する場合にのみ、あなたの答えが働きます。彼の "脚本"がなければ、あなたがちょうど彼に言ったことは、彼の脚本の終わりを超えて続くでしょう。そういうわけで、私はあなたの答えが間違っていると言っています。正しいかもしれませんが、そうではないかもしれませんが、誰かが "輸出"が彼が探していた必要な要素だと考えるようになるかもしれないので、 – brightlancer

50
env VAR=value myScript args ... 
+13

または 'VAR = value myScript args ... ' – Rockallite

+4

1.' PATH = $ PATH:どうすればいいですか?XYZ echo $ PATH | grep XYZ'には出力がありませんか? 2. 'env'を使用する方法と使用しない方法の違いは何ですか? – qubodup

+9

です。エコーコマンドを実行する前に**シェルがPATH変数**を展開するためです。その展開を遅らせる必要があります。 1つの方法: 'PATH = $ PATH:XYZ sh -c 'echo $ PATH' | grep XYZ' - ここでは一重引用符が鍵です –

53
VAR1=value1 VAR2=value2 myScript args ... 
+1

私は 'vblank_mode = 0 glxgears'を実行するためにこれを何度もやってきました。それは動作しますが、実行後に 'vblank_mode = 0:command not found'と表示されますが、' env'を前に付けてもこれは発生しません。 [testing ...]明らかにzshはそれを好きではない(まだそれを正しく使っている)が、bashはそれで問題ない。私は今から 'env'メソッドを使うつもりです。 –

関連する問題