bashスクリプトでグローバル環境変数を設定するにはどうすればよいですか?
私が次のようなことをするなら
#!/bin/bash
FOO=bar
...または
#!/bin/bash
export FOO=bar
... varsはローカルコンテキストにとどまっているようですが、スクリプトの実行が終了した後もvarsを使い続けたいと思います。
回答:
でスクリプトを実行する .
. myscript.sh
これにより、現在のシェル環境でスクリプトが実行されます。
export
新しいプロセスで使用できる変数を管理します。
FOO=1
export BAR=2
./runScript.sh
その後$BAR
、の環境で利用可能になりますがrunScript.sh
、利用でき$FOO
ません。
source
のエイリアスです.
。したがってsource myscript.sh
、より明確にしたい場合は、代わりに実行できます。
シェルスクリプトを実行すると、サブシェルで実行されるため、親シェルの環境に影響を与えることはありません。次の手順でスクリプトを入手します。
. ./setfoo.sh
これは、の文脈でそれを実行し、現在のないように、シェルサブシェル。
bashのmanページから:
。ファイル名[引数]
ソースファイル名[引数]現在のシェル環境でfilenameからコマンドを読み取って実行し、filenameから最後に実行されたコマンドの終了ステータスを返します。
filenameにスラッシュが含まれていない場合、PATH内のファイル名を使用して、filenameを含むディレクトリが検索されます。
PATHで検索されるファイルは、実行可能である必要はありません。bashがPOSIXモードでない場合、PATHにファイルが見つからない場合は、現在のディレクトリが検索されます。
shopt組み込みコマンドのsourcepathオプションがオフになっている場合、PATHは検索されません。
引数を指定すると、ファイル名実行時の定位置パラメータになります。
それ以外の場合、位置パラメータは変更されません。戻りステータスは、スクリプト内で最後に終了したコマンドのステータス(コマンドが実行されていない場合は0)であり、ファイル名が見つからないか読み取れない場合はfalseです。
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
source
ですか?
man source
すると、必要なものが得られます。
source
ます。たぶんOPはそうではありません。
#!/bin/bash
export FOO=bar
または
#!/bin/bash
FOO=bar
export FOO
マニュアルエクスポート:
シェルは、指定された名前に対応する変数にexport属性を与えます。これにより、変数は、後で実行されるコマンドの環境に置かれます。変数の名前の後に= wordが続く場合、その変数の値はwordに設定されます。
export FOO = /mydir/bar
FOO=bar
export FOO