新Linux入門|bash・source・実行権限によるスクリプト実行の違い

Linuxでシェルスクリプトを実行する方法はいくつかありますが、
bash」「source」「実行権限を付けて直接実行」では、動作の仕組みがまったく異なります

 同じスクリプトでも、実行方法によって「どのシェルで実行されるか」「環境変数が引き継がれるか」「実行権限が必要か」が変わります。

ここでは、これら3つの実行方法の違いをわかりやすく紹介します。

⚙️ 1. bashコマンドで実行する方法

シェルスクリプトは bash コマンド を使って実行できます。

📘 書式

[suzuki@AlmaLinux ~]$ bash myscript.sh

💬 この方法では、myscript.sh に実行権限がなくても実行可能です。
なぜなら、bash コマンド自体に実行権限があり、スクリプトファイルをbashが読み取って実行するからです。

📗 ポイントまとめ

項目内容
実行権限不要(bashコマンドが実行するため)
実行場所新しいサブシェル
変数の影響範囲呼び出し元に影響しない
使いどころスクリプトをテスト・デバッグするときに便利

📘 例

[suzuki@AlmaLinux ~]$ bash /home/suzuki/test.sh

💬 このとき、bashが新しいシェルを起動し、test.sh の内容を順番に実行します。

🧠 2. sourceコマンド(または . コマンド)で実行する方法

source コマンド(または .)は、スクリプトを現在のシェルセッション内で実行します。

📘 書式

[suzuki@AlmaLinux ~]$ source myscript.sh

または、

[suzuki@AlmaLinux ~]$ . myscript.sh

💬 この方法では 新しいサブシェルは作られません
スクリプトの中で設定した変数や環境の変更が、呼び出し元のシェルにも反映されます。

📗 ポイントまとめ

項目内容
実行権限不要(現在のシェルで読み込むだけ)
実行場所現在のシェルセッション内
変数の影響範囲呼び出し元にも反映される
使いどころ環境変数・エイリアス設定・関数定義などに最適

📘 例

[suzuki@AlmaLinux ~]$ source ~/.bashrc

💬 .bashrc の変更内容を反映するときに使う、まさにおなじみのコマンドですね。

🧩 3. 実行権限を付けて直接実行する方法

スクリプトに 実行権限( x ) を付けると、コマンドのように直接実行できるようになります。

📘 手順

[suzuki@AlmaLinux ~]$ chmod +x myscript.sh
[suzuki@AlmaLinux ~]$ ./myscript.sh

💬 この方法では、スクリプトファイルの先頭にある「シバン(shebang)」が重要です。
例えば、スクリプトの最初が以下のようになっている場合

#!/bin/bash

この場合、実際の実行は「bash /path/to/myscript.sh」と同等です。

📗 ポイントまとめ

項目内容
実行権限必要(chmodで+xを付与)
実行場所新しいサブシェル
変数の影響範囲呼び出し元に影響しない。
使いどころスクリプトを独立したプログラムとして利用する場合

🚫 「myscript.sh: コマンドが見つかりません」エラーの理由

スクリプトをカレントディレクトリで実行するとき、次のようなエラーが出ることがあります。

📘 失敗例

[suzuki@AlmaLinux ~]$ myscript.sh
bash: myscript.sh: コマンドが見つかりません...

💬 これは、現在のディレクトリ (.) が PATH 環境変数に含まれていない ためです。
Linuxでは、セキュリティのためにカレントディレクトリは自動探索されません。

📘 成功例

[suzuki@AlmaLinux ~]$ ./myscript.sh

💬 ./ を付けることで、「現在のディレクトリ内のmyscript.sh」を明示的に実行できます。

🧱 bash・source・実行権限の比較まとめ

実行方法実行権限の必要性実行される場所環境変数の反映主な用途
bash myscript.sh不要サブシェル反映されないテスト・デバッグ向き
source myscript.sh不要現在のシェル反映される設定の読み込み
./myscript.sh必要サブシェル反映されない実行ファイル化

💬 スクリプトを「環境設定用」に使うなら source
「独立したプログラム」として動かしたいなら chmod +x で直接実行、
「動作を確認したいだけ」なら bash が便利です。

✅ まとめ

  • bash は新しいシェルを起動して実行(実行権限不要)
  • source は現在のシェル内で実行(変数や設定を引き継ぐ)
  • ./myscript.sh は実行権限が必要(独立したプログラムとして実行)
  • カレントディレクトリのスクリプトを実行する際は ./ を付ける。

💬 これらの違いを理解しておくことで、スクリプトのテスト・設定反映・自動化を自在に使い分けることができます。