@shinyaz

dotfiles の --force をセクション指定で安全にする

約1分

dotfiles の install.sh--force オプションがあるが、全ファイルを一括上書きしてしまうのが不便だった。AWS の config のように、リポジトリにはテンプレートを置いてローカルだけ実際の値を入れているファイルがあると、うっかり --force でテンプレートに戻ってしまう。

解決策は copy_file に第3引数としてセクション名を渡す方式だ。

should_force() {
  local section="$1"
  [[ "$FORCE_ALL" == true ]] || [[ " ${FORCE_TARGETS[*]} " == *" $section "* ]]
}
 
copy_file() {
  local src="$1" dest="$2" section="${3:-}"
  if [[ -f "$dest" ]] && ! should_force "$section"; then
    warn "Skipped (already exists): $dest"
    return 1
  fi
  cp "$src" "$dest"
}
 
# 呼び出し側でセクション名をタグ付け
copy_file "$DOTFILES/zsh/zshrc"  "$ZDOTDIR/.zshrc"            zsh || true
copy_file "$DOTFILES/aws/config" "$XDG_CONFIG_HOME/aws/config" aws || true

これで ./install.sh --force zsh git と打てば zsh と git だけ上書き、aws は触らない。引数なしの --force は従来通り全上書き。既存の copy_file に引数を1つ足すだけなので、破壊的変更もない。

共有する

田原 慎也

田原 慎也

ソリューションアーキテクト @ AWS

AWS ソリューションアーキテクトとして金融業界のお客様を中心に技術支援を行っています。クラウドアーキテクチャや AI/ML に関する学びをこのサイトで発信しています。このサイトの内容は個人の見解であり、所属企業の公式な意見や見解を代表するものではありません。