◆ 単純にシェル切り替えても動かない
◆ デフォルトシェルは bash のままで .bashrc の最後に exec fish
◆ bash で初期化処理済ませて fish shell に切り替える 

少し前からたまに目にする fish shell
何が良いのかよくわかってないけど便利だとか

Linux は zsh にしてて困ってないし設定がめんどそうなのでこのままでいい
Windows でたまに使う msys2 はたまにしか使わないので bash のまま放置してました
pacman で検索してみるとインストールできるようだったのでインストールしてみました

fish と実行すると
user@DESKTOP ~>

というプロンプトになって (ユーザ名@ホスト名  です)コマンド打ってると薄く補完候補が出ています
zsh ではこうなるプラグイン入れていましたがデフォルトでこんな機能がついてるのはいいですね

デフォルトを fish にする

msys2 ではデフォルトシェルを変える方法も linux とは違います
msys2_shell.cmd を編集するといいようですが 最近の msys2 は mingw64.exe や msys2.exe といった exe ファイルからの起動になっています
msys2_shell.cmd を経由していた bat ファイル起動ならそれでよかったのですが 今ではこのファイルを変えても使ってないので効果なしです

代わりに変えるところないかみていると
mingw64.ini
msys2.ini

と exe に対応してるような ini ファイルが置かれています

ここに
SHELL=/usr/bin/fish

と書けば fish shell がデフォルトのシェルになるようです


さっそくやってみると
/>

なんかプロンプトが違う
色々試してみたのですが msys2 で一番よく使う ssh コマンドがおかしなことになっていました
/> ssh fedora
Pseudo-terminal will not be allocated because stdin is not a terminal.

標準入力がターミナルじゃないから疑似ターミナルが割り当てられない……なるほどわからんです


とりあえず bash から起動したときは問題なかったので 初期設定 .bashrc などの部分が fish shell では実行されないからだと思います
ユーザ側ホームディレクトリにあるドットファイルではこれといった設定はなくて /etc/profile にあるコードが msys2 用の設定をしてそうです

fish shell の自動で読みこまれるファイル /etc/fish/config.fish に
source /etc/profile

と単純に読みこませてみたら
'case' builtin not inside of switch block

なんか構文エラーぽい事言われました
fish shell は bash 互換の shell script じゃないみたい


構文調べて直すのも面倒なので bash から実行すれば動くんだし と bash から 呼び出すことにしました

.bashrc の最後にこれを追加します
exec fish

これで msys2.exe を起動したら fish shell が使えるようになりました