1.06.2基礎
script.shで変数展開や条件分岐後に、実際に実行されるコマンドを追跡する。
各コマンドの実行直前の形を表示する。
適切なコマンドはどれか。
× 不正解
bash -xはxtraceを有効にし、展開後のコマンドを実行前に標準エラーへ表示する。秘密値の露出には注意が必要である。
詳細解説
誤り
bash -n script.sh構文検査だけを行い、通常は実行しない。
-nは構文解析を行うがコマンド実行を抑止する。実行時の分岐や変数展開結果を追跡できない。
誤り
bash -v script.sh読み込んだ入力行を表示するが、展開後の実行形ではない。
-vは入力として読んだ元の行を表示する。変数が具体値になった実行直前の形を見る用途には-xを使う。
誤り
bash -e script.sh特定条件で非0終了したコマンド後にシェルを終了させる。
-eはエラー時終了の挙動を変更するオプションで、各コマンドの追跡表示を有効にしない。例外条件もある。
正しい
bash -x script.sh展開後の単純コマンドを実行直前に追跡表示する。
-xは展開後の単純コマンドを実行前に標準エラーへ表示する。実際に渡る引数や分岐経路を追跡できる。
実際に確かめる
一時的な検証環境で実行できる例です。
bash -c 'f=$(mktemp); printf "name=blue\nprintf \"%%s\\n\" \"$name\"\n" >"$f"; bash -x "$f" 2>&1; rm -f "$f"'期待される結果
+ name=blue、+ printf ... blueの追跡とblueの実行結果理解のポイント
- -xは実行追跡
- 展開後を表示
- 秘密情報に注意
確認時の注意
- 確認環境: GNU Bash 5.2 / 一時ファイル
- 本番環境で-xを使う前に、診断出力へ秘密値が含まれないか確認する。
基礎のおさらい
PS4
追跡行の先頭はPS4で制御され、既定では+が表示される。行番号などを加えて調査しやすくできる。
秘密情報
展開後の引数にはパスワードやトークンが含まれ得る。共有ログへ無条件に保存しない。
問題IDKL-102-940
確認環境GNU Bash 5.2 / 一時ファイル
最終技術確認2026-08-13
誤り・権利侵害を報告