Zsh 基礎 2 -- Ubuntu でログインシェルと tmux のデフォルトシェルを zsh に変更する
Tags: bash, zsh, tmux
Published: 2022-08-10 17:22:00

## why

ターミナルの現在地とコマンドを打つところを分離したかった

そのためには zsh にしてテーマを適用する必要があった

新しい Mac OS の場合は最初から Zsh になっている。
なので変更の必要はない。

---

## 現在のシェルが bash なのを確認

https://hirooooo-lab.com/development/change-mac-shell/

hirooooo-lab の記事を参考に変更を試みる

```sh
kaede@ship:~$ echo $SHELL
```
> /bin/bash

$SHELL の変数をみると、現在のシェルがわかる。

---

## 入っているシェルリストに zsh がないのを確認

`/etc/shells` の中身を見ると

```sh
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
```

dash や tmux はあるが、zsh がなかった。

`which zsh` で探しても出力されない。

---

## zsh のインストール

https://qiita.com/sayama0402/items/ac9e078b024c3287f99f

```php
sudo apt-get install zsh

The following additional packages will be installed:
  zsh-common
Suggested packages:
  zsh-doc
The following NEW packages will be installed:
  zsh zsh-common
                                                                                               
Unpacking zsh-common (5.8-3ubuntu1.1) ...
Unpacking zsh (5.8-3ubuntu1.1) ...

Setting up zsh-common (5.8-3ubuntu1.1) ...
Setting up zsh (5.8-3ubuntu1.1) ...
Processing triggers for man-db (2.9.1-1) ...
```

zsh と zsh-common がインストールされた。

---

## zsh のセットアップ

> zsh

このコマンドで bash から zsh を起動できる。

```php
This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.
```

```
You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

(2)  Populate your ~/.zshrc with the configuration recommended
     by the system administrator and exit (you will need to edit
     the file by hand, if so desired).

--- Type one of the keys in parentheses --- 
```

最初の Z Shell の設定のガイドがでてきた。
Quit か Exit か メインメニューに行くか、管理者のおすすめにするかを選べる。

管理者のおすすめにしてみる。

> 2

```
/home/kaede/.zshrc:15: scalar parameter HISTFILE created globally in function zsh-newuser-install
kaede@machine ~ %
```
---

## zsh の一時的な起動

zsh と打てば bash から zsh が開く。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ew0hlqdogczwny79vcf7.png)
 
ユーザー名と端末名が水色背景
現在のディレクトリが水色文字

に最初からなっていて、bash よりこの時点でみやすい。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d1xpp9ohifp3hqfnit7v.png)

現在いるパスが長くなると、
自動でコマンドを打つところは改行してくれるらしい。便利。

この % の位置を > マークにしたいので拡張をいれたい。
その前にログイン時に zsh が開くようにする。

---

## ログインシェルのデフォルトを zsh にする

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o6rndcih38zjtvwazw8r.png)

新しく zsh を入れただけだと、exit して再び新しいシェルを開くと
当然 bash が開く。

https://qiita.com/sayama0402/items/ac9e078b024c3287f99f#%E8%BF%BD%E8%A8%98

chsh, CHange SHell でデフォルトで開くシェルを変えられるようだ

```php
chsh -s $(which zsh)
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k55dkv0zf41bi3j1194m.png)
 
ターミナルアプリを再起動すると zsh が開いた

---

## $SHELL 変数が bash のままなのを確認

```php
echo $SHELL
```
> /bin/bash

しかし、$SHELL 変数の値は bash のままだ。

新しいタブも zsh で開くが、この変数を変えないと
tmux は zsh で開かない。

---

## SHELL 変数を zsh にして tmux も zsh で開くようにする

$SHELL に応じて開くのか、
tmux を開くと zsh ではなく bash で開いてしまう。

https://unix.stackexchange.com/a/430460

この回答を読むと、chsh は $SHELL を書き換えない。
なので /etc/passwd を書き換えろと書いてあった。

```
root:x:0:0:root:/root:/bin/bash
```

ただちょっとこれを書き換えるのは怖いので
.zshrc でエクスポートして変えるようにする

```sh
# change SHELL value
export SHELL="/usr/bin/zsh"
```

SELL に zsh のパスを入れて export する。

```php
~ % echo $SHELL
/usr/bin/zsh
```

入っている！

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6hqg40veu05mqy6fjyka.png)

これで tmux 起動後に zsh に入れた！

## P.S

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f7fpj8rkupxkc1dj0xoq.png)
 
https://mikebuss.com/2014/02/02/a-beautiful-productive-terminal-experience/

zsh を使うと、コマンドを typo した時に
正しい候補を探してくれて
y を押すと、直して再実行もしてくれる。

---

## まとめ

`sudo apt-get install zsh` で zsh をインストールできる

`chsh -s $(which zsh)` でログインシェルを zsh に変更できる

`export SHELL="/usr/bin/zsh"` を .bashrc に書くことで
tmux のログインシェルも zsh に変更できる。