How to change default shell for Linux susbsystem for Windows

Solution 1:

You cannot change the default shell per se since the Linux subsystem is started via the bash.exe residing in the system directory.

You can, however, make a new shortcut like the one that already exists for bash and make it run the command

%systemroot%\system32\bash -c /usr/bin/fish

This way you will be running fish immediately.

Solution 2:

Since Fall Creators Update you can use chsh to setting default shell. This still doesn't work if you are running WSL using bash.exe command but this work if you running WSL with ubuntu.exe command.

Also, since Fall Creators Update we should to install WSL OS from Windows Store.

Set zsh as default shell:

chsh -s /bin/zsh

then run (or restart) ubuntu.exe from command prompt.

Solution 3:

Open bash, run nano ~/.bashrc and paste this in:

if [[ -t 1 && -x /usr/bin/zsh ]]; then
    exec /usr/bin/zsh
fi

Just change the shell to fish or whatever you want. The -x check is important if you ever re-install Bash -- you won't be able to open it after a fresh install because the exec command will fail and then Bash just closes.

If that happens, delete/rename your .bashrc file here:

C:\Users\<USERNAME>\AppData\Local\lxss\home\<USERNAME>\.bashrc

The -t I believe checks if stdout is open. Not sure why that's important, I copied it from this article.