シェルスクリプトを実行する際にsourceとか./とか実行方法がいろいろあってたまにわからなくなるのでまとめておきます。
bashでscript.shを実行することを想定しています。
準備
以下のような内容のファイルを用意します。
$source script.sh
sourceはコマンドを実行した現在のbashプロセスを用いてスクリプトを実行します。つまりプロセスがフォークしません。よって現在のインタラクティブシェルを起動した時に読み込まれる.bashrcで定義されている内容を使うことができますし、スクリプト内でシェルを終了させるexitなどを記述するとsourceを実行したシェルが終了します。またスクリプトで定義/変更した変数はスクリプトの実行が終了した後も利用できます。#!/bin/bash(シェバング)を記述しなくても実行できます。
$ source script.sh foo hoge $ echo $bar bar
エイリアスとして定義されているコマンドを実行できました。変数も利用できてます。
$ ./script.sh
これはスクリプトの内容をコマンドとして実行するので、新たなbashプロセスを立ち上げます。sourceの時と違い、エイリアスで定義されているコマンドを使ったり、シェバングを省略するとエラーになります。また実行する前に実行権限を与える必要があります。
$ chmod +x script.sh $ ./script.sh foo ./sourceTest.sh: line 4: hoge: command not found $ echo $bar
$ bash script.sh
基本的には上の$ ./script.shと同じく別プロセスが立ち上がりますが、ファイルの実行権限は必要ありません。
$ sh script.sh
これはbashの祖先であるBourne Shellを立ち上げます。基本的に$bash script.shで実行した場合と同様ですが、bashで使うことのできる一部の機能が利用できないことがあります。