bash, shコマンド
- bash, shコマンドはサブシェルを起動してシェルスクリプトを実行する
$ bash シェルスクリプト
or
$ sh シェルスクリプト
sourceコマンド (.
)
- sourceコマンドは現在のシェルで直接シェルスクリプトを実行する
- 実行権
$ source シェルスクリプト
or
$ . シェルスクリプト
execコマンド
- execコマンドは現在のプロセスを指定したコマンドに置き換える(元のシェルには戻らない)
$ exec コマンド
- 現在のシェルが終了し、指定したコマンドがそのプロセスを置き換える
- シェルスクリプト内で
exec
を使うと、その後の処理は行われない - ログインシェルで使うと、ログアウト状態になることもあるので注意
各コマンドの違い
コマンド | 処理される場所 | シェルの動作 | ユースケース |
---|---|---|---|
bash script.sh sh script.sh
|
サブシェル(新しいプロセス) | スクリプト終了後に戻る | 新しい環境で安全にスクリプトを実行したいとき |
source script.sh . script.sh
|
現在のシェル | シェル内で直接実行 | 環境変数や設定を今のシェルに反映させたいとき |
exec script.sh |
現在のプロセス置き換え | 元のシェルが消える | スクリプトに完全に置き換える(戻らない)必要があるとき |
権限
実行方法 | ファイルの読み取り権 (r) | ファイルの実行権 (x) | ディレクトリの実行権 (x) | 備考 |
---|---|---|---|---|
bash script.sh |
✅ | ❌ | ✅ |
bash がスクリプトを読み込んで実行。読み取り権が必要で、実行権は不要。 |
source script.sh . script.sh
|
✅ | ❌ | ✅ | 現在のシェルに読み込むため、読み取り権が必要。実行権は不要。 |
exec script.sh |
✅ | ✅ | ✅ |
exec は新しいプロセスを起動せずに現在のシェルを置き換える→ ./script.sh のように使うのが一般的で、その場合は 実行権が必要。 |