1. はじめに
ARアドバンストテクノロジ株式会社(略称:ARI)でクラウドエンジニアをしている大畑と申します。
突然ですが、皆さんがShellScriptを実行するときに、何のコマンドを利用されていますでしょうか。
sh example.sh
のように sh を利用することもあれば、
source example.sh
のようにsource を利用する場合もあると思います。
この記事では、それぞれのコマンドの違いと適切な使い方を解説したいと思います。
2. shコマンドとは
shコマンドの概要(新しいシェル環境を作成してスクリプトを実行)
sh
コマンドは、新しいシェル環境を作成し、その環境内でスクリプトを実行します。
実行後は元のシェル環境に戻るため、スクリプト内で設定された変数や関数は親シェルには影響しません。
基本的な使い方(例:sh script.sh)
シェルスクリプト script.sh
を sh
コマンドで実行する方法は以下のとおりです。
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職全方位で仲間を募集しております。
カジュアル面談、随時受付中です!
ご興味ある方はこちらをご覧ください。