言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. Bash辞典
  3. source / .(ドット)

source / .(ドット)

『source』(または『.』ドット)は別のシェルスクリプトを現在のシェルで読み込んで実行するコマンドです。変数や関数の定義を別ファイルに分けて再利用したり、設定ファイルを再読み込みしたりするときに使います。

構文

別スクリプトを現在のシェルで読み込みます(source コマンド)。

source ファイルパス

ドット(.)コマンドでも同じ動作です(POSIX 準拠)。

. ファイルパス

設定ファイルを再読み込みします(変更を即反映)。

source ~/.bashrc
. ~/.bashrc

関数ライブラリを読み込みます。

source ./lib/functions.sh

source と bash の違い

実行方法概要
source ファイル現在のシェルで実行します。変数・関数の定義が呼び出し元に引き継がれます。
. ファイルsource と同義です(POSIX 準拠の書き方)。
bash ファイルサブシェルで実行します。変数・関数は呼び出し元に引き継がれません。
./ファイルサブシェルで実行します(bash と同様、呼び出し元に変数は残りません)。

サンプルコード

以下の2つのファイルを用意します。『lib/config.sh』は共通設定を定義するファイルです。

lib/config.sh
#!/usr/bin/env bash
DB_HOST="localhost"
DB_NAME="myapp"
DB_USER="dbuser"
APP_ENV="production"

log() {
    echo "[$(date +%Y-%m-%d\ %H:%M:%S)] $*"
}

『source』で設定ファイルを読み込むと、定義した変数や関数が現在のシェルで使えるようになります。

main.sh
#!/usr/bin/env bash
source ./lib/config.sh

log "データベースに接続中: $DB_HOST/$DB_NAME"
echo "環境: $APP_ENV"
bash main.sh
[2026-03-06 12:00:00] データベースに接続中: localhost/myapp
環境: production

『.env』ファイルを読み込んで環境変数を一括設定するパターンです。

.env
API_KEY=secret123
DEBUG=true
load_env.sh
source .env
echo "API キー: $API_KEY"
bash load_env.sh
API キー: secret123

『source』と『bash』の違いを確認します。『bash』はサブシェルで実行するため変数が呼び出し元に残りません。

diff_test.sh
cat > /tmp/test.sh <<'EOF'
MY_VAR="hello from script"
EOF

# bash で実行(サブシェル: 変数は残らない)
bash /tmp/test.sh
echo "bash 後: ${MY_VAR:-未定義}"
bash diff_test.sh
bash 後: 未定義

『source』で読み込むと、現在のシェルで実行されるため変数が引き継がれます。

source /tmp/test.sh
echo "source 後: $MY_VAR"
source 後: hello from script

概要

$ source』の最大の特徴は現在のシェルプロセスで実行することです。『~/.bashrc』や『~/.zshrc』の変更を即反映する場合も『$ source ~/.bashrc』を使います。

共通の関数・変数を定義した「ライブラリファイル」を『$ source』で読み込むパターンは複数スクリプトの保守性を高めます。読み込むファイルが存在しない場合はエラーになるため、『[ -f ファイル ]』で存在を確認してから読み込むと安全です。

[ -f config.sh ] && source config.sh

条件式の詳細は test / [ ] / [[ ]] を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。