スクリプト設計

共通関数ライブラリ|die / log / require / retry / validate

この記事の狙いBash スクリプトで毎回書いている定番関数を、再利用可能な共通ライブラリとしてまとめます。最小機能は die(異常終了)、log(レベル付き stderr)、require(前提コマンド/ファイル検証)、retry(指数バッ...
スクリプト設計

CLI スケルトン|getopts / usage / log / trap

この記事の狙いBash 製 CLI の最小骨格を提示します。getopts によるオプション解析、--help/--version を備えた Usage、レベル付き log、trap による後始末、エラー時の終了コード設計まで、コピペしてす...
スクリプト設計

ワンライナーの分解術|関数化・再利用

この記事の狙い手元のワンライナーを**“使い捨て”で終わらせず**、安全・再利用・テスト可能な小さな関数へ分解する手順を示します。入出力の境界を決め、標準出力=結果/標準エラー=ログ、終了コードの意味、副作用の隔離を徹底します。前提と対象B...
スクリプト設計

NUL 安全の処理系|find -print0 | xargs -0

この記事の狙いファイル名に空白・タブ・改行・ワイルドカードが含まれても壊れない“NUL セーフ”な処理系を作る方法をまとめます。中核は find -print0 ↔ xargs -0、シェル側は read -r -d '' / mapfil...
スクリプト設計

サブシェルの落とし穴|変数消失の防止

この記事の狙いBash でサブシェル(child shell)が暗黙に生まれるパターンを把握し、意図せぬ変数消失・状態未反映を防ぎます。代表的な落とし穴(パイプ・() グループ・コマンド置換・バックグラウンド)を安全な置き換えパターンで解消...
スクリプト設計

ロックと並列安全|flock / PID / 一時DIR

この記事の狙い並列実行される Bash スクリプトで二重起動や同時書き込みを防ぐためのロック設計をまとめます。flock を中心に、PID ファイル、一時ディレクトリロック(mkdir 原子性)、タイムアウト/再試行、**掃除(trap)*...
スクリプト設計

ログ&トレース|PS4 / set -x / syslog

この記事の狙いBash スクリプトの観測可能性を高めるために、ログ(stderr・syslog)とトレース(set -x)を安全・低摩擦で運用する流儀を示します。PS4 でのトレース行フォーマット、BASH_XTRACEFD による出力分離...
スクリプト設計

終了コード設計|失敗の定義と伝播

この記事の狙いBash スクリプトの失敗の定義を明確化し、終了コード(exit status)を一貫して扱えるようにします。0/非0 の基本から、予約コード、関数・パイプライン・サブシェルでの伝播、set -e/pipefail/trap ...
スクリプト設計

入出力とプロセス制御|リダイレクト/パイプ/サブシェル

この記事の狙いBash の入出力(リダイレクト・パイプ)とプロセス制御(サブシェル・並列実行)の基本を、安全運用の観点で設計指針に落とし込みます。「どこへ出すか」「どこから読むか」「どの文脈で実行するか」を明示し、副作用とスコープを可視化し...
スクリプト設計

IFS と read -r の安全読込|空白・改行耐性

この記事の狙いシェルスクリプトでテキストやファイル名を安全に読み込むための定石をまとめます。IFS と read -r を正しく使い、空白・タブ・末尾スペース・末尾改行なし行・NUL 区切りに耐える読み込みを実現します。前提と対象Bash ...
スクリプト設計

パターン・正規表現の使い分け|[[ ]] / extglob / grep -E

この記事の狙いBash スクリプトで条件分岐や文字列判定を行うとき、**「glob パターン」と「正規表現」**が混在しやすく、思わぬバグにつながります。ここでは ] におけるパターン一致と正規表現一致の違いを整理し、extglob を含む...
スクリプト設計

select メニュー入門|対話型選択と入力検証

この記事の狙いBash に組み込まれている select 構文を理解し、インタラクティブな選択肢メニューを最小コストで作れるようにします。単純に使うと「空入力で無限ループ」「不正番号で壊れる」などの罠があるため、入力検証・終了条件・デフォル...
スクリプト設計

クォート戦略と文字列安全化|ダブルクォート前提の指針

この記事の狙いBash の文字列安全化を“場当たり”ではなく一貫した戦略として運用できるようにします。ダブルクォートを原則とし、配列・パラメータ展開・コマンド置換・ヒアドキュメント・read 入力・グロブ/IFS/ロケールとの相互作用を事故...
スクリプト設計

パラメータ展開レシピ|既定値・置換・長さ取得

この記事の狙いBash のパラメータ展開を“暗記”ではなくレシピとして使い回せるようにします。既定値・代入・エラー・置換・切り出し・長さ・前後マッチ除去・大文字小文字変換を、安全なクォート方針とともに整理します。前提と対象Bash 4+(一...
スクリプト設計

ヘルプと Usage 整備|自己説明する CLI

この記事の狙いBash 製 CLI を自己説明型にします。--help と --version、わかりやすい Usage/Options/Examples/Exit codes/Env を常に同じ型で出し、引数エラー時は用法を短く見せる実装...