Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2817

zshとbashでdotfilesを共通化する

$
0
0

概要

かつてmacでzshがデフォルトになった時に、
「もうbash環境は卒業だー」とばかりにdotfilesをzsh仕様に修正しました。

ですが現実は厳しく、未だにbash環境をいじる機会はなくなりません。
(特に業務時)

そこでzshとbashの両方で使えるように、dotfiles内をなるべく共通化してみました。

zshとbashの違い

ファイル構成が違う

  • bash → .bash_profile / .bashrc
  • zsh → .zprofile / .zshrc

zshとbashで配置するファイルを変える必要があります。
また、当然中身も違ってきます。

使えるaliasが違う

alias -g L='| less'

Global Aliasはzsh限定の機能です。
bashで上の宣言をするとエラーになります。

対応

1. 判定用functionを作る

function is_bash_shell() {
  if [ $SHELL = "/bin/bash" ]; then
    true
  else
    false
  fi
}

bashを使っているかどうかの判定には色々なやり方があるようですが、
もし他の処理が必要になった場合は、このfunctionを拡張していきます。

2. スクリプト内で処理を分ける

install.sh

. ./.functions

# bash
if is_bash_shell; then
  ln -siv .profile ~/.bash_profile
  ln -siv .bashrc ~/.bashrc

# zsh
else
  ln -siv .profile ~/.zprofile
  ln -siv .zshrc ~/.zshrc
fi

zshとbashで配置するファイルを変えます。
シェル固有の処理は、.bashrcと.zshrcにそれぞれ書いておけばOK。

.aliases

. ./.functions

# global aliases (zsh only)
if ! is_bash_shell; then
  alias -g L='| less'
  alias -g H='| head'
  alias -g T='| tail -n 200'
  alias -g G='| grep'
  alias -g S='| sort | uniq'
fi

これでGlobal Aliasはzshの時だけ宣言されるようになります。

まとめ

「なるべく処理を共通化させたい」と考えた結果、スクリプト内で最低限の部分だけ分岐するという形になりました。

その後ごちゃごちゃやって、現在はこうなっています。
https://github.com/zizochan/dotfiles

もっと良い方法があったら教えてもらえると嬉しいです。


Viewing all articles
Browse latest Browse all 2817

Trending Articles