msys2 を fish shell にしてみた
◆ 単純にシェル切り替えても動かない
◆ デフォルトシェルは bash のままで .bashrc の最後に exec fish
◆ bash で初期化処理済ませて fish shell に切り替える
◆ デフォルトシェルは bash のままで .bashrc の最後に exec fish
◆ bash で初期化処理済ませて fish shell に切り替える
少し前からたまに目にする fish shell
何が良いのかよくわかってないけど便利だとか
Linux は zsh にしてて困ってないし設定がめんどそうなのでこのままでいい
Windows でたまに使う msys2 はたまにしか使わないので bash のまま放置してました
pacman で検索してみるとインストールできるようだったのでインストールしてみました
fish と実行すると
というプロンプトになって (ユーザ名@ホスト名 です)コマンド打ってると薄く補完候補が出ています
zsh ではこうなるプラグイン入れていましたがデフォルトでこんな機能がついてるのはいいですね
msys2_shell.cmd を編集するといいようですが 最近の msys2 は mingw64.exe や msys2.exe といった exe ファイルからの起動になっています
msys2_shell.cmd を経由していた bat ファイル起動ならそれでよかったのですが 今ではこのファイルを変えても使ってないので効果なしです
代わりに変えるところないかみていると
mingw64.ini
msys2.ini
と exe に対応してるような ini ファイルが置かれています
ここに
と書けば fish shell がデフォルトのシェルになるようです
さっそくやってみると
なんかプロンプトが違う
色々試してみたのですが msys2 で一番よく使う ssh コマンドがおかしなことになっていました
標準入力がターミナルじゃないから疑似ターミナルが割り当てられない……なるほどわからんです
とりあえず bash から起動したときは問題なかったので 初期設定 .bashrc などの部分が fish shell では実行されないからだと思います
ユーザ側ホームディレクトリにあるドットファイルではこれといった設定はなくて /etc/profile にあるコードが msys2 用の設定をしてそうです
fish shell の自動で読みこまれるファイル /etc/fish/config.fish に
と単純に読みこませてみたら
なんか構文エラーぽい事言われました
fish shell は bash 互換の shell script じゃないみたい
構文調べて直すのも面倒なので bash から実行すれば動くんだし と bash から 呼び出すことにしました
.bashrc の最後にこれを追加します
これで msys2.exe を起動したら 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.
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 が使えるようになりました