shとsourceの違い
問題
スクリプトを書いて source に渡すと実行可能です。
shやbashに渡しても実行が可能です。
何が違うのですか。
答え
スクリプトを実行するという点では、以下は同じです。
./test.sh (実行権限を付与して) sh test.sh bash test.sh source test.sh
違う点は、上の3つは新たな子プロセスを生成して実行するものであり、soruceの場合は現在のシェルで実行するものである点です。
例えば上の test.sh が変数を定義するスクリプトだった時、bash に渡して実行しても現在のシェルに変数は定義されません。
sourceで実行すると定義されます。
$ cat test.sh X=123 $ bash ./test.sh $ echo $X ← 何も定義されていない $ source ./test.sh $ echo $X 123 ← スクリプト内で定義したとおり
なので、環境変数を定義する目的で ~/.profile などを書いて、ログイン、ログアウトをし直さずに今のシェルに反映させたいときには、source を使用するとできる。
source ~/.profile
「source」というコマンド名が、「実行」を連想させない英単語なので、何か得体のしれないおまじないのように感じてしまいますが、現在のシェルで実行するコマンドです。
コメント