必要に応じていくつかの環境変数を設定する次のスクリプトを作成しました。
#!/bin/sh
export BASE=/home/develop/trees
echo $BASE
export PATH=$PATH:$BASE
echo $PATH
端末の下に表示されるコマンドと結果の下:スクリプトは実行されますが、変数は最後に設定されません。
~$: ./script.sh
/home/develop/trees
/bin:......:/home/develop/trees
~$: echo $BASE
~$:
どうしましたか?前もって感謝します。ミルコ
export
は、export
コマンドが実行されたシェルの子プロセスに変数の割り当てをエクスポートします。コマンドライン環境は、スクリプトのシェルの親であるため、変数の割り当ては表示されません。
.
(またはsource
)bashコマンドを使用して、現在のシェル環境でスクリプトコマンドを実行し、目的を達成できます。
source ./script.sh
echo "$BASE"
生産します
/home/develop/trees
スクリプトでよく見られるsource
コマンドは、POSIX標準の一部である.
のbash同義語です(たとえば、.
はダッシュで使用できますが、source
はそうではありません)。
. ./script.sh # identical to "source ./script.sh"
(. script.sh
およびsource script.sh
は最初にPATH
でscript.sh
を検索するため、script.sh
へのパスを指定する方が安全です。)
スクリプトを実行すると、サブシェルで実行されます。変数は、そのサブシェルのコンテキスト内でのみ有効です。それらを.bashrc
または.profile
に設定し、 変数とサブシェル を読んでください。 export
ステートメントは、例のように上にではなく、階層(現在のシェルとそのすべてのサブシェル)で機能します。
または(現在のシェルの環境にスクリプトを本当に影響させたい場合)、次のように実行します:
. ./script.sh
これにより、現在のシェルで実行されますが、変数を階層に渡すこともできません。
手間をかけずに環境変数を設定したいことがよくあります。
これが、この便利さを実装するために.bashrcに追加するものです。
defect() {
if [ $1 ] && [ -z $2 ]
then
eval 'export DEFECT=$1'
return 0
else
echo 'Usage: defect {number}'
return 1
fi
}