I am trying to change my default shell from bash to zsh in cygwin.
- The normal unix command
chshisn't available on cygwin - The etc/passwd file it seems isn't used anymore in existing versions of cygwin.
So how else can the default shell be changed ?
If you run mintty.exe directly or run Cygwin Terminal from the start menu or desktop (which is a shortcut to mintty.exe), you can set the SHELL environment variable in Windows to /usr/bin/zsh.
On Windows 7:
The rest should be self-explanatory.
The answer depends on how you start Cygwin.
If you start Cygwin with Cygwin.bat, modify the last line of /Cygwin.bat (usually C:\cygwin\ or C:\cygwin64\).
If you start Cygwin with mintty, then add the shell as a parameter: mintty /usr/bin/zsh -
Copied from my answer on Stack Overflow:
Instead of creating a passwd file, which Cygwin recommends against1, you could edit /etc/nsswitch.conf. Add or edit the following line:
db_shell: /usr/bin/fish
The down/up side of this method is that, if you have multiple users, this change affects all of them. The up/up side is that it's dead simple. The only catch is that you have to restart Cygwin.
If you do use mkpasswd after this change, it will use your new default shell for all users that are allowed to log on.
1 The mkpasswd documentation says this:
Don't use this command to generate a local /etc/passwd file, unless you really need one. See the Cygwin User's Guide for more information.
I can't really find any solid reasoning in the user's guide, other than a mention that you'll have to regenerate the /etc/passwd and /etc/group files if your users and groups change, which I suppose is a decent enough reason. I can say that the process is somewhat error prone for newbies.
My hosting service, dreamhost.com, has an option box in their user edit screen. It can choose among four different shells and looks somewhat like this
User Type: (Click one of these three buttons)
* FTP user - allows login via FTP only.
* SFTP user - allows login via SFTP only.
* Shell user - allows login via both SSH and FTP.
Shell Type: ____/usr/bin/tcsh_____
Disallow FTP?: ___