2009-09-23 23 views
74

bashスクリプトでグローバル環境変数を設定する方法は?シェルスクリプトのグローバル環境変数

私は

#!/bin/bash 
FOO=bar 

...または

#!/bin/bash 
export FOO=bar 

のようなものを行う場合、私は後にそれらを使用して維持したいと思いに対し... VARSは、ローカルコンテキストに滞在するように見えますスクリプトは実行を終了しました。

答えて

121

は、現在のシェル環境でスクリプトを実行します.

. myscript.sh 

これを使用してスクリプトを実行します。あなたは

FOO=1 
export BAR=2 
./runScript.sh 

を言うならば、$BARrunScript.shの環境で利用できるようになりますが、$FOOがないように変数は、新しいプロセスに利用できるようになります

export支配します。

+24

最初のものには注意してください。スラッシュがなければ、それはあなたの道を見ます: 'のようなものを使用してください。 ./myscript.sh 'が特定のものを確実に実行するようにしたい場合に使用します。 – paxdiablo

+1

私はグローバルがGLOBALだと思った!これはトラブルシューティングの最後の1時間をクリアします。 – Dennis

+8

'source'は' .'のエイリアスです。したがって、より明示的にしたい場合は、代わりに 'source myscript.sh'を実行することができます。 –

-3
FOO=bar 
export FOO 
+2

これは動作しません、それは親プロセスの環境変数を設定しません。 – dreamlax

+3

親プロセスのみが親プロセスの環境変数を設定できます。 –

45

シェルスクリプトを実行すると、サブシェルで実行されるため、親シェルの環境に影響を与えません。あなたは実行して、スクリプトを調達したい:

. ./setfoo.sh 

これはないサブシェルとして、現在シェルのコンテキストでそれを実行します。 bashのmanページから

。ファイル名[引数]
ソースファイル名[引数]

読むと、現在のシェル 環境でのファイル名からコマンドを実行し、最後のコマンドの終了ステータスを返しますが、ファイル名から を実行します。

ファイル名にスラッシュが含まれていない場合は、PATHのファイル名を使用して、 というファイル名のディレクトリが見つかります。

PATHで検索されたファイルは実行可能である必要はありません。 POSIXモードでbashが ではない場合、PATHにファイルが見つからない場合はカレントディレクトリが検索されます。

shopt組み込みコマンドのsourcepathオプションがオフの場合、 PATHは検索されません。

引数が指定された場合、filenameが実行されると、位置指定パラメータ になります。

それ以外の場合、位置パラメータは変更されません。戻り状況 は、スクリプト内で最後に終了したコマンドのステータスです( コマンドが実行されていない場合は0)。filenameが見つからない場合、または が読み取れない場合はfalseです。

+0

興味深い - 私は前にその構文を見ていない。これはsource ./setfoo.shと同じですか? –

+2

同じことですが、入力するのが速く(古いシステムではより互換性があります - kshにはソースコマンドはありませんが、 '。'はあります)。 – paxdiablo

4
#!/bin/bash 
export FOO=bar 

または

#!/bin/bash 
FOO=bar 
export FOO 

男の輸出:

シェル彼らは中にさせるものとし、指定した名前に対応する変数へのエクスポート属性をしなければなりません後で実行されるコマンドの環境。変数の名前の後に= wordが続く場合、その変数の値はwordに設定されます。

+0

シェルスクリプトのすべての初心者に、envvar名と '='文字と値自体の間に空白がないことに注意してください。これはうまくいかないでしょう: 'export FOO =/mydir/bar' – russellhoff

6

source myscript.shも可能です。 Linuxのコマンドsourceため

説明:

source is a Unix command that evaluates the file following the command, 
as a list of commands, executed in the current context 
+0

ここではちょっと詳しく説明します。 'ソース'が何をするのかについての簡単な説明はどうですか? –

+0

@PhillipCloudタイプの '' man source'が端末にあり、あなたが望むものを手に入れることができます。 – CDT

+5

私は 'ソース'に精通しています。多分OPはそうではありません。 –