TL;DR
- Bashを使うにあたって、zshが持つ標準機能のレベルと同じにするには初期設定が面倒だったけどなんとかいける。Bashは進化していると感じた。
- bash-itが便利
- 設定は .bash_profile も含めてoinume/dotfilesに上げているので参考にどうぞ
動機
ターミナル環境を見直す(1) - zsh + prezto編 - oinume journal の記事でデフォルトのshellをzshに切り替えたけど、tmuxでバンバン新しいタブを開くと起動の遅さが気になっていてそろそろどうにかしたいと思っていた。また、zshは便利だけど設定項目を覚えたり調べるのが大変だし、ほとんどの機能は使いこなせていなかったので、これを機にシンプルなbashに乗り換えてみた。この記事はその際にやったことのメモ。
以下によると次期macOS Catalinaではbashに代わってzshがデフォルトになるらしく、時代と逆行していて面白い。
macOS mojaveに最新のbashをインストール
maxOS mojaveのデフォルトのbashは3.2.57と古いので、まずは最新のbashをhomebrewでインストールする。
$ brew install bash
chshでログインシェルを変更
brewでインストールしたbashは /usr/local/bin/bash にあるので、これをログインシェルとして変更する。
$ chsh -s /usr/local/bin/bash (パスワードを聞かれる) chsh: /usr/local/bin/bash: non-standard shell
しかし、↑のようなエラーになってしまうので、 sudo vi /etc/shells
して /usr/local/bin/bash
を追記してもう一度 chsh コマンドで変更する。
$ chsh -s /usr/local/bin/bash
Prompt
やはり素のプロンプトだと味気ないので、Prompt関連はけっこう設定をいじった。以下に詳細を書く。
Powerline
定番のPowerline。bash-powerlineというものがあったので、これを以下のように少しカスタマイズして使っている。(Macの場合プロンプトの記号が$
ではなく
になるのがどうしても嫌だった)
export PS_SYMBOL='$' [ -f ~/dotfiles/bash-powerline.sh ] && . ~/dotfiles/bash-powerline.sh
カレントディレクトリの表示
デフォルトだとカレントディレクトリだけがプロンプトに表示されて、同じディレクトリが複数あるとどこにいるのかわからなくなる問題がある。zshだと ~/go/src/github.com/oinume/playground-go にいる場合は ~/g/s/g/o/playground-go のようにいい感じに省略してくれるので似たようなことがやりたかった。調べたところ、bashでもPROMPT_DIRTRIMという環境変数で似たようなことができる。PROMPT_DIRTRIM=2
にした場合は ~/.../oinume/playground-go
のようになる。一つ上のディレクトリ名がわかれば良いと思ったので、自分としてはこれで満足している。
コマンド履歴のターミナル間での共有
zshでは当たり前にできるやつ。以下を .bash_profile に追加すればOK。
function share_history { history -a history -c history -r } PROMPT_COMMAND='share_history' shopt -u histappend export HISTSIZE=2000
過去に移動したディレクトリの検索
Bash の小枝集のcdhist.sh + fzf で検索できるようにしている。.bash_profileでの設定は以下のようになっていて、Ctrl+@で呼び出せるようにしている。
[ -f ~/dotfiles/cdhist.sh ] && . ~/dotfiles/cdhist.sh _cd_cdhist() { cd "$(for i in "${CDHIST_CDQ[@]}"; do echo $i; done | fzf)" } bind -x '"\C-@": _cd_cdhist';
bash-it
様々なalias、補完、プラグインが用意されているbash-itというものを使ってみる。
以下のようにインストールする。
$ git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it $ ~/.bash-it/install.sh
補完やプラグインを有効にする
$ bash-it enable completion bash-it
$ bash-it enable plugin xyz
上記のコマンドを実行すると、~/.bash-it/enabled にsymlinkが作成される。以下のコマンドで alias, completion, pluginの一覧を見ることができるので、自分が使いそうなものを有効にしていくと良い。
bash-it show aliases bash-it show completions bash-it show plugins
[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus)
- 作者: 山森丈範
- 出版社/メーカー: 技術評論社
- 発売日: 2017/01/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る