SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

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」というコマンド名が、「実行」を連想させない英単語なので、何か得体のしれないおまじないのように感じてしまいますが、現在のシェルで実行するコマンドです。

関連するメモ

コメント