1.03.1標準
settings.shにはAPP_PORT=8080という代入がある。
別プロセスではなく現在のシェルへ読み込み、実行後もAPP_PORTを参照したい。
POSIX形式の適切なコマンドはどれか。
× 不正解
. FILEは指定ファイルを現在のシェルで読み込み、変数代入や関数定義を現在の環境へ反映する。
詳細解説
誤り
bash settings.sh子Bashで実行するため、子の変数変更は親シェルへ戻らない。
誤り。子Bash内のAPP_PORTは子の終了とともに失われ、既存の親シェルへ設定されない。
誤り
./settings.sh実行可能ファイルとして別プロセスで動かし、親の変数を変更しない。
誤り。直接実行も別プロセスであり、そこでの変数代入は親のシェル状態を変更しない。
誤り
cat settings.sh内容を表示するだけで、代入をシェルコードとして実行しない。
誤り。catは文字列APP_PORT=8080を表示するだけで、代入構文として評価しない。
正しい
. ./settings.sh.組み込みがファイルを現在のシェル環境で読み込み実行する。
正しい。.はsourceと同じ役割を持つBash組み込みで、現在のシェルへAPP_PORTを定義する。
実際に確かめる
一時的な検証環境で実行できる例です。
tmp=$(mktemp -d); printf 'APP_PORT=8080\n' >"$tmp/settings.sh"; . "$tmp/settings.sh"; printf '%s\n' "$APP_PORT"; rm -rf "$tmp"期待される結果
8080理解のポイント
- .はsource builtin
- current shellで実行
- 子プロセスではない
確認時の注意
- 確認環境: Bash 5.x / 一時設定ファイル
基礎のおさらい
設定ファイルの読込
環境設定や関数定義を現在のセッションへ反映したいときにsourceを使う。
信頼境界
sourceしたファイルは現在の権限と環境で任意のシェルコードを実行するため、内容を信頼できる必要がある。
問題IDKL-101-445
確認環境Bash 5.x / 一時設定ファイル
最終技術確認2026-08-13
誤り・権利侵害を報告