Edited at

WSL のデフォルトシェルを切り替える


結論

少なくとも Fall Creators Update 以降では chsh -s が使用できる。

例:

chsh -s $(which zsh)


注意点


WSL の起動方法の違い

PowerShell など他のシェルから WSL を起動する方法は主に3つある。

bash(.exe) , wsl(.exe) , ubuntu(.exe) (ディストリビューション名.exe)

がある。

このうち bash(.exe) で起動した場合、強制的に /bin/bash で起動されるため、 chsh -s で設定した後でも /bin/bash で起動される。

コマンドを引数で渡したい場合、 bashubuntu の場合

> bash -c $command

> ubuntu -c $command

-c をつけるが、 wsl の場合

> wsl $command

と何もつけず直後にコマンドを書く。

また、 bash / wsl で起動した場合はカレントディレクトリで起動される。

ディストリビューション名.exe で起動した場合は Linux におけるホームディレクトリで起動される。


トラブルシューティング

いくつか切り替えを繰り返している内にWSL が起動直後に落ちるようになってしまった。

自分の場合、 ubuntuchsh -s $(which fish)fish に切り替えた後、 chsh -s (which zsh)zsh に戻そうとしたら発生することがあった。

シェルによるかもしれないしディストリビューションによるかもしれないし、原因不明。


起動できなくなった場合の対処法

PowerShell などから

> bash

> wsl /bin/bash
> ubuntu -c /bin/bash

と起動シェルを指定すれば起動できる。( /usr/bin/zsh などでも可)

しかし、 chsh -s $(which zsh)zsh に切り替えようとしても、

password を求められ、入力しても PAM Authentication failure で失敗し、切り替えられなかった。

その時は、 sudo vim /etc/pam.d/chsh のうち auth required pam_shells.so の行をコメントアウトした後

sudo chsh -s $(which zsh) でデフォルトシェルを zsh に戻すことができた。


参考