Vivarium · Layer 2 · Docker (catalogue)

bash の local がコマンド置換の終了コードを覆い隠す

local をコマンド置換と組み合わせると、local 自身の (常に 0 の) 終了コードが右辺の終了コードを上書きする。そのため set -e は右辺の失敗を黙って素通りさせ、本番スクリプトが静かに壊れる。upstream の defect ではなく bash と POSIX が文書化した挙動だが、このページはその意外さを数秒で再現できるようにする。

CI verdict スナップショット

verdict スナップショットを読み込み中…

自分で再現する

docker run --rm ghcr.io/aletheia-works/vivarium-bash-local-shadows-exit:latest

初回 pull は約 10 MB (bash:5.2 alpine)。実行は 1 秒未満。Dockerfile と repro.sh は レシピディレクトリ にある。

CI スナップショットの出力

Initialising…
(読み込み中…)