source コマンド

現在のシェル環境でファイルやスクリプトからコマンドを実行します。

概要

source コマンド(別名 . でもアクセス可能)は、指定されたファイルからコマンドを読み込み、現在のシェルコンテキストで実行します。スクリプトを直接実行するとサブシェルで実行されるのに対し、source は現在のシェルでコマンドを実行するため、読み込まれたファイルで定義された変数や関数が現在のセッションで持続します。

オプション

source コマンドはシェル組み込みコマンドであるため、オプションは最小限です:

-h

ヘルプ情報を表示します(一部のシェルで利用可能)

$ source -h
.: usage: . filename [arguments]

使用例

設定ファイルの読み込み

$ source ~/.bashrc

ドット(.)エイリアスの使用

$ . ~/.bash_profile

引数付きでの読み込み

$ source script.sh arg1 arg2

環境変数の読み込み

$ cat env.sh
export PROJECT_ROOT="/path/to/project"
export API_KEY="abc123"

$ source env.sh
$ echo $PROJECT_ROOT
/path/to/project

ヒント

環境設定には source を使用する

source は、現在のシェルセッションで利用したい環境変数、関数、エイリアスを読み込むのに最適です。

スクリプトのデバッグ

bash では -x オプションと共に source を使用することで、実行される各コマンドを表示してスクリプトをデバッグできます:

$ source -x script.sh

ログアウトせずに設定を再読み込み

.bashrc.zshrc などのシェル設定ファイルを変更した場合、source を使用してターミナルを再起動せずに変更を適用できます。

スクリプトパスの考慮事項

source を使用する場合、スクリプトパスは呼び出し元スクリプトの場所ではなく、現在のディレクトリからの相対パスになります。

よくある質問

Q1. source とスクリプトを直接実行することの違いは何ですか?

A. スクリプトを直接実行する場合(例:./script.sh)、サブシェルで実行されます。そのスクリプトで定義された変数や関数は、スクリプトが終了すると失われます。source を使用すると、コマンドは現在のシェルで実行されるため、変数や関数はスクリプト完了後も持続します。

Q2. source はどのような種類のファイルでも使用できますか?

A. 有効なシェルコマンドを含むテキストファイルであれば、どのようなファイルでも読み込むことができます。通常は、シェルスクリプト(.sh)、設定ファイル、環境設定ファイルで使用されます。

Q3. source とドット(.)コマンドに違いはありますか?

A. 機能的な違いはありません。ドット(.)は POSIX 標準コマンドであり、source は bash やその他のシェルで利用可能なより読みやすいエイリアスです。どちらも同じことを行います。

Q4. 読み込もうとしたファイルが存在しない場合はどうなりますか?

A. 「No such file or directory」(そのようなファイルやディレクトリはありません)のようなエラーメッセージが表示され、コマンドは非ゼロの終了ステータスを返します。

参考文献

改訂履歴