1.06.1基礎
~/.bashrcにWORK_COLOR=greenを追加した。
子シェルを作らず、現在のBashへ定義を反映する。
適切なコマンドはどれか。
× 不正解
source FILEは現在のシェルでファイルを実行するため、変数、関数、aliasなどをその場で反映できる。
詳細解説
誤り
bash ~/.bashrc子Bashで実行するため、変数変更は親の現在シェルへ戻らない。
bash ~/.bashrcは別の子Bashでファイルを実行する。子で設定されたWORK_COLORは親の現在Bashへ逆向きに伝わらない。
正しい
source ~/.bashrc指定ファイルを現在のシェル環境で読み込み実行する。
source ~/.bashrcは現在のBashで内容を実行する。変数定義が現在環境に残るため、編集内容をその場で反映できる。
誤り
exec ~/.bashrc現在のシェルを指定ファイルの実行で置き換えようとする。
execは現在のプロセスを別プログラムで置き換える組込みである。設定を読み込んで元のシェルへ戻る用途ではない。
誤り
export ~/.bashrcexportは変数や関数の属性を扱い、ファイルを読み込まない。
exportは名前を環境へ渡せる状態にするが、パスで指定した設定ファイルを実行する機能はない。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'f=$(mktemp); printf "WORK_COLOR=green\n" >"$f"; source "$f"; printf "%s\n" "$WORK_COLOR"; rm -f "$f"'期待される結果
green理解のポイント
- sourceは現在シェル
- 子シェルを作らない
- 定義が現在環境へ残る
確認時の注意
- 確認環境: GNU Bash 5.2 / 一時ファイル
- 信頼できない設定ファイルをsourceすると、現在の権限で任意のシェルコードが実行される。
基礎のおさらい
現在シェルでの実行
sourceとドット組込みは新しいプロセスを作らず、代入や関数定義を現在のシェルへ残す。
子シェルの隔離
bash FILEで作った子プロセスの変数変更は、終了しても親プロセスの環境を書き換えない。
問題IDKL-102-900
確認環境GNU Bash 5.2 / 一時ファイル
最終技術確認2026-08-13
誤り・権利侵害を報告