sourceコマンド
sourceコマンドとは、他シェルファイルをカレントシェルで実行するコマンドです。
sourceコマンドは、csh、bashなどで利用できるコマンドです。
shではsourceコマンドはサポートしていないため代わりに.を使用します。
カレントシェルで実行するというのは、今開いているシェル(現在のプロセス)で実行するという意味です。
動作確認
では、動作確認のために、3つのシェルファイルを用意します。A.sh、B.sh、C.shです。
A.shは変数定義してあるだけのシェルです。
B.shは、sourceコマンドでA.shを実行した後、 C.shを実行します。
B.shとC.shは、A.shで定義した変数の値をechoで出力しようと試みます。
A.shの中身です。
A.sh
hensu="Apple"
B.shの中身です。
B.sh
#!/bin/bash
source A.sh
echo "A.shの変数の値(B.sh):"${hensu}
./C.sh
C.shの中身です。
C.sh
#!/bin/bash
echo "A.shの変数の値(C.sh):"${hensu}
B.shを実行してみます。
実行結果
$ ./B.sh
A.shの変数の値(B.sh):Apple
A.shの変数の値(C.sh):
はい、B.shでA.shの変数の値を取得できていることが確認できました。
sourceコマンドは、カレントシェルの中で実行されるので、B.shの中にA.shの内容が記述されているのと同義です。  
一方で、C.shではA.shの変数の値が取得できていません。
なぜこうなるかというと、B.shでC.shを実行するとき、./C.shとファイル名を指定して実行しているからです。  
ファイル名を指定して実行すると、サブシェル(現在のシェルから新しく起動された別のシェル。つまりサブプロセス)でシェルファイルが実行されることになります。
カレントシェルとサブシェルは別のプロセスなので、B.shでsourceコマンドで実行したA.shの変数の値を、C.shで取得することはできないのです。
これを解決するにはexportコマンドを使用します。
exportコマンドを使用することで、C.shでもA.shの変数の値が取得できるようになります。
exportコマンドについては以下の記事で解説しています。
 頭脳一式
				頭脳一式	

