8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ShellScript】shコマンドとsourceコマンドの違いについて

Last updated at Posted at 2025-02-11

1. はじめに

ARアドバンストテクノロジ株式会社(略称:ARI)でクラウドエンジニアをしている大畑と申します。

突然ですが、皆さんがShellScriptを実行するときに、何のコマンドを利用されていますでしょうか。

sh example.sh

のように sh を利用することもあれば、

source example.sh

のようにsource を利用する場合もあると思います。

この記事では、それぞれのコマンドの違いと適切な使い方を解説したいと思います。

2. shコマンドとは

shコマンドの概要(新しいシェル環境を作成してスクリプトを実行)

sh コマンドは、新しいシェル環境を作成し、その環境内でスクリプトを実行します。
実行後は元のシェル環境に戻るため、スクリプト内で設定された変数や関数は親シェルには影響しません

基本的な使い方(例:sh script.sh)

シェルスクリプト script.shsh コマンドで実行する方法は以下のとおりです。

sh script.sh

3. sourceコマンドとは

sourceコマンドの概要(現在のシェル環境でスクリプトを実行)

source コマンドは、現在のシェル環境を維持したまま スクリプトを実行します。
そのため、スクリプト内で定義した 変数や関数 は、実行後も親シェルに残ります。

通常、環境変数やエイリアスの設定を適用する目的で使用されます。

基本的な使い方(例:source script.sh または . script.sh)

スクリプト script.sh を現在のシェル環境で実行するには、以下のコマンドを使用します。

source script.sh

または、source の短縮形である ドット (.) コマンド も利用できます。

. script.sh

4. shとsourceの主な違い

まとめると以下のようになります。

項目 shコマンド sourceコマンド
シェル環境 新しいシェルを作成 現在のシェルを使用
変数の引き継ぎ 親シェルに影響なし 親シェルに影響あり
実行対象 実行可能なスクリプト スクリプト内の設定や関数の適用
使いどころ 独立したスクリプト実行 設定ファイルの適用(環境変数・エイリアス)

5. shとsourceで実行結果を比較してみる

実行環境はAWSのCloudShellを利用します。(fedoraベースのAmazon Linux 2023が基盤)

環境変数への影響

以下のようなテスト用ファイルを作成しました。

# test.sh
HOGE="Hello"
echo $HOGE

shとsourceの両方で実行してみます。

まずはshコマンドでテスト用ファイルを実行します。

sh test.sh
> Hello # 環境変数が設定され、正しく出力される

shell実行後の環境変数がどうなっているかを確認してみます。

echo $HOGE
> # 出力なし、ShellScriptで設定した環境変数が引き継がれていない

続いてsourceコマンドでテスト用ファイルを実行します。

source test.sh 
> Hello # 環境変数が設定され、正しく出力される

shell実行後の環境変数がどうなっているかを確認してみます。

echo $HOGE
> Hello # ShellScriptで設定した環境変数が引き継がれている

関数への影響

以下のようなテスト用ファイルを作成しました。

# func.sh
my_function() {
    echo "This is a function"
}

まずはshコマンドでテスト用ファイルを実行し、関数を呼び出してみます。

sh func.sh
my_function

> bash: my_function: command not found # shellscriptで定義した関数を呼び出すことができない

続いてsourceコマンドでテスト用ファイルを実行し、関数を呼び出してみます。

source test.sh 
my_function

> This is a function # shellscriptで定義した関数を呼び出すことが可能

6. まとめ

環境変数を設定するような場面

  • PATH 環境変数を追加し、コマンドを実行できるようにする
  • gitやJavaなどのアプリを利用するときの設定値を記載する
  • AWSの認証情報の埋め込み

などを効率化するために、shellscriptでツール化している場合は、実行方法に注意が必要です。

sh : 新しいshell環境を作成し、実行する
source : 現在のshell環境で実行する

という違いを踏まえたうえで適切に利用しましょう。

以上、「shコマンドとsourceコマンドの違いについて」 でした。

仲間を募集しています!

ARIではエンジニア・ITコンサルタント・PM職全方位で仲間を募集しております。
カジュアル面談、随時受付中です!
ご興味ある方はこちらをご覧ください。

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?