ログインシェルの設定をミスり、ターミナルソフトが入力を受け付けなくなった話

## はじめに

自分がログインシェルの設定をミスったことにより、ターミナルソフトが入力を受け付けなくなったときの話です。
ターミナルソフトは（誤った）設定に従い正常の動作をしたまでで、バグがあったわけではありません。

ただ正直ものすごく焦りました。

## 現象

- iTerm2

以下のような警告が出て、OKを押すと即終了する状態になりました。メニューバーは触れるものの、コマンドを打つことはできません。

```
A session ended very soon after starting. Check that the command in profile “Default” is correct.
```

![スクリーンショット 2022-06-16 1.13.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1093272/6d4c1bd1-cfaf-2745-13ad-ca7a0216158e.png)

- Macにデフォルトで入ってるターミナル

「プロセスが完了しました」という表記が出て、メニューバーは触れるものの、コマンドを打つことはできません。

![スクリーンショット 2022-06-16 1.14.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1093272/21d68484-3d33-b745-cde6-96050e473098.png)

## 背景と原因

先日、新しいMacBookProを購入したので環境を整えておりました。
自分はログインシェルに zsh を使用しております。ただバージョン管理の点などを考慮し、Mac にデフォルトで入っている zsh ではなく、 `Homebrew からインストールした zsh` を使うようにしております。

`Homebrew からインストールした zsh` を使うには `/etc/shells` にパスを追記し `chsh` コマンドで指定する必要があります。

Homebrewでインストールしたzshのパス

```
% brew --prefix zsh
/opt/homebrew/bin/zsh
```

ただそこで `/etc/shells` に追記するパスを以下のように間違えてしまいました。

```
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

# このようにパスを追記するはずが...
/opt/homebrew/bin/zsh

# 間違ってこのように追記してしまいました。
/opt/homebrew/opt/zsh
```

間違えた言い訳としては、この作業の前に git も同じく Homebrew からインストールしたものに変更をしていて、 git のパスがそのディレクトリだったためです。 

```
% brew --prefix git
/opt/homebrew/opt/git
```

zsh のパスもきちんと確認していたのですが git のパスと同じと見間違い、さらに git のパスはすでにクリップボードにコペーしていたため git のところを zsh に書き換えるだけで流用できると思い込んでいました。


また `chsh` コマンドでパスを指定する際にも、自分はまだ間違いに気づいてなかったので、しっかりと間違えたパスを指定してしまいました。
ここで警告は出てたのですが、「デフォルトで入っているシェルではないよ」という意味だと思ったので気にしてませんでした。

```
% chsh -s /opt/homebrew/opt/zsh
Changing shell for hoge.
Password for hoge:
chsh: WARNING: shell '/opt/homebrew/opt/zsh' is not a regular file
```

そして自分はログインシェルの設定ができたと思い込んでいるため、ターミナルソフトを再起動したところ、今回の現象が起きました。

## 直し方

ターミナルソフトには `Permission denied` とあったので、許可する必要があるのかと思いました。
ただターミナルソフトにコマンドを打つことはできません。ものすごく焦りました。

ググったところ以下の記事に辿り着き、 Mac デフォルトのターミナルから別のシェルを立ち上げられることを知りました。

https://bacchi.me/mac/terminal-troubleshoot/

記事に従い、メニューバーの「シェル」→「新規コマンド」を押すと、以下のような画面が出てきます。
そこに `/bin/zsh`　と打ち込むと、 `/bin/zsh` を使ってターミナルを立ち上げることができました。歓喜。

![スクリーンショット 2022-06-16 1.32.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1093272/fa312700-f798-d1c8-ad5e-02bbd2ed49aa.png)

ターミナルが入力を受け付けるようになったので、 Homebrew の zsh の調査をしました。
とりあえず（正しいと思っている）パスを直接入力したところ確かに `Permission denied` と出ました。

```
% /opt/homebrew/opt/zsh
zsh: permission denied: /opt/homebrew/opt/zsh
```

そこでおかしいと思い、もう一度 zsh のパスを確かめたところ、自分がパスの間違いをしていることに気づきました。

そこからは `/etc/shells` を修正し、再度 `chsh` で設定し直しました。

これで直ると思いきや `chsh: no changes made` というレスポンスが返ってきました。

```
chsh -s /opt/homebrew/bin/zsh
Changing shell for hoge.
Password for hoge:
chsh: no changes made
```

ただ設定を見直しても今度は正しく設定されています。

またググったところ以下の記事に辿り着きました。

https://softantenna.com/blog/change-login-shell-to-zsh-on-os-x/

どうやらシステム設定のログインシェルには `/opt/homebrew/opt/zsh` と設定されておりました。
ちなみにここが変わらなかった理由は正確にはわかりません。（今回の現象を再現したときには自動で変わりました。）

![スクリーンショット 2022-06-18 0.34.42.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1093272/e1ffed7f-fdf2-45ea-bfc7-c4a91efa73d7.jpeg)

それを `/opt/homebrew/bin/zsh` と直しました。

そしてようやくターミナルソフトは通常通り動くようになり、ログインシェルは `Homebrew からインストールした zsh` に変更することができました。

## まとめ

深夜に作業するときは、いろいろと気をつけたほうが良いことを学びました。新しいPCを早速壊したと思いとても焦りました。