シェル(zshなど)の変更方法について

ここではMacOSやLinuxにでの使用可能なシェルの確認、シェルの変更方法を軽くメモ書きとして残しておきます。



#そもそもシェルとは?
シェルとは、ユーザーが入力したコマンドをコンピュータに伝え、OSがそれを実行するプログラムです。
LinuxやMacOSではデフォルトでbashシェルとなってます。

これ以外にもtcsh, fish, wish, zshなどいろんなシェルがあるようです。(私が使ったことあるのはbash, zshだけ)

ただ、私自身も普段から「zsh最強」と聞いたり、実際に使っている人から勧めてもらってzshにした立場なので他のシェルと何が違うか等はあまり詳しくはないです。参考として以下のURLにそれぞれシェルの違いがまとめています。
http://www2u.biglobe.ne.jp/~hsaka/docs/shell.html


それではこれから実際にbashからzshへ変更する手順を書いていきます。
ターミナル上での説明に移るのでターミナルを立ち上げてください。

#1.自分のシェルの確認
まず、現在自分が使用しているシェルの確認方法として

```
echo $SHELL
```

と打つことで確認できます。


#2.使用可能なシェルの確認
自分のPCで設定できるシェルの種類を見るには

```
cat /etc/shells
```

と打つことで確認できます。


#3.bashから別のシェルへ(今回はzsh、入っていなかったらインストールしてください。)
シェルの変更のコマンドはchshコマンド(change shell)を用います。

```
chsh -s /bin/zsh
```

ここで、-sオプションを付けることでシェルを指定して変更できます。
これを入力後パスワードを聞かれるのでPCログイン時のパスワードを打って成功したのち、一旦ターミナルを切って再度立ち上げるとzshなっていることが確認できると思います。

あとは.zshrcをホームディレクトリに作成していろんな設定を書き込んで使うだけです。
参考(.zshrcの内容): https://qiita.com/d-dai/items/d7f329b7d82e2165dab3

zshで強いのは補完機能らしいのでそこらへんを調べて.zshrcに書き込んであげるといいかも？です。

ここでは自分の設定の一部ですが載せておきます。色んな所からコピペして使ったので各自調べてどういう挙動するかを試してみてください。


```
export LANG=ja_JP.UTF-8
export LC_ALL=’ja_JP.UTF-8′
export SHELL=/bin/zsh
autoload colors
colors
### prompt ######################
PROMPT=”%{${fg[green]}%}[%m]%(!.#.$) %{${reset_color}%}”
export LS_COLORS
# git設定
autoload -Uz vcs_info
setopt prompt_subst
zstyle ‘:vcs_info:git:*’ check-for-changes true
zstyle ‘:vcs_info:git:*’ stagedstr “%F{yellow}!”
zstyle ‘:vcs_info:git:*’ unstagedstr “%F{red}+”
zstyle ‘:vcs_info:*’ formats “%F{green}%c%u[%b]%f”
zstyle ‘:vcs_info:*’ actionformats ‘[%b|%a]’
precmd () { vcs_info }
RPROMPT=$RPROMPT’${vcs_info_msg_0_}’
### autojump ########################
autoload -U compinit && compinit
HISTFILE=~/.zsh_history
HISTSIZE=100000
SAVEHIST=100000
setopt hist_ignore_dups
setopt hist_ignore_all_dups
setopt share_history
setopt auto_cd
setopt auto_pushd
#setopt correct
setopt list_packed
setopt nolistbeep
alias ls=’ls -G’
alias la=’ls -a’
alias ll=’ls -l’
alias cp=’cp -i’
alias -g L=’| less’
alias -g G=’| grep’
## zsh setting #######################
export TERM=xterm-256color
HGENCODING=utf-8
export HGENCODING
setopt auto_pushd
setopt pushd_ignore_dups
setopt complete_aliases
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey “^P” history-beginning-search-backward-end
bindkey “^N” history-beginning-search-forward-end
zstyle ‘:completion:*:(processes|jobs)’ menu yes select=2
bindkey “\e[Z” reverse-menu-complete
function chpwd() { ls }
export LSCOLORS=gxfxcxdxbxegedabagacad
```

これをホームディレクトリの.zshrcに書いたあとに起動し直すか、
source ~/.zshrcを書いてあげることでターミナルに設定を読み込ませます。

軽く解説として、

```
"### prompt ######################"
->ターミナルのプロンプトの見た目設定する行
```

```
"# git設定"
->プロンプトのあとに自分のいるgitのブランチ表示をする行
```

```
"### autojump ########################"
->.zsh_historyに書き込む履歴の数設定、エイリアスなど設定した行
```

```
"##  zsh setting  #######################"
->コマンド履歴検索、cd後に自動lsなどの設定行
```

特に最後のzsh settingの所が強力です。
例えば、

```
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end
```
はコマンド履歴をctrl+p、ctrl+nで後方検索、前方検索します。

さらに特徴として、

```
git checkout develop
```
と言った長いコマンドを書いた後に同じコマンドを打とうとする場合、通常のbashだと上矢印などで履歴の前方検索をしていきますが、途中で色んな処理をしてるとcd, lsなどの全然関係ないコマンドもさかのぼります。

しかし上の設定を書くことで、git cと言った所でctrl+pと押すと、git cで始まる部分一致したコマンドだけを前方検索してくれます。　だいぶ時間短縮できます。
以上です。