Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How can I configure zsh to be the default shell under Cygwin?

share|improve this question

migrated from stackoverflow.com Oct 28 '11 at 2:58

This question came from our site for professional and enthusiast programmers.

up vote 43 down vote accepted

Unless you're using cygwin as a multiuser environment (in which case use chsh as you would under a standard environment.)

Otherwise, you just change cygwin.bat to run zsh -l -i instead of bash --login -i and it will run as a login shell.  

Of course, if you want to run multiple shells from startup, just create a set of .bat files to load different shells. (sh, ksh, csh, fish etc)

Update...

I felt I should update this to provide info on doing this without chsh but still doing it on the Unix end. Edit the /etc/passwd file and replace occurrences of /bin/bash with /bin/zsh. (This is effectively what chsh would do, but this way you'd do it for all users in one go.)

share|improve this answer
11  
There is no longer an /etc/passwd in cygwin by default, and chsh is no longer supported. This answer does not help (April 10, 2014). – Jeff Snider Apr 10 '15 at 14:51
    
Go home @THESorcerer you're drunk – Slomojo Oct 27 '15 at 11:38
    
@JeffSnider run mkpasswd -l -p "$(cygpath -H)" > /etc/passwd and edit the newly create /etc/passwd file – BrunoLM Mar 29 at 21:38

If I read your question right, you're looking for something else than what chere supplies (which, granted, is pretty cool in its own right).

The current version of Cygwin doesn't have an /etc/passwd file, and the system I'm working on has Windows account information in a domain database out of my control. Consequently, chsh is no longer supported.

I also found that bash is not hard-coded into the startxwin script, nor is it hard-coded in any .bat file. Turns out you don't need to fiddle with .bat files at all.

Searching for how to change my shell, I found some advice about mkpasswd

I added it to the mix.

The man-page said:

SYNOPSIS
   mkpasswd [OPTIONS]...

OPTIONS
   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.

   -c,--current
          Print current user.

  DESCRIPTION
        The   mkpasswd  program can be used to create a        /etc/passwd
   file.  Cygwin doesn't need  this  file,        because  it  reads  user
   information  from  the Windows account databases,       but you can add
   an  /etc/passwd file, for instance       if your machine is often  dis‐
   connected from its domain controller.

        Note  that this information is static, in contrast to the informa‐
   tion       automatically gathered by Cygwin from  the  Windows  account
   databases.  If        you  change  the user information on your system,
   you'll need to regenerate       the passwd file for it to have the  new
   information.


        For  very  simple needs, an entry for the current user can be cre‐
   ated       by using the option  -c.

(I don't know why the spacing is so "off"...)

I then used the following command:

mkpasswd -c | sed -e 'sX/bashX/zshX' | tee -a /etc/passwd

The next time you open a Cygwin Terminal, it will go straight to zsh

And that, I think, is what you asked for.

share|improve this answer

I just add the bin directory in the cygwin directory to my Windows Path Environment Variable and then either create a shortcut to:

mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login

or just change the default cygwin start menu shortcut to the same.

share|improve this answer
2  
I had to use /bin/zsh instead of zsh. – kraiz Sep 6 '15 at 16:44
    
the bin directory in the cygwin directory to my Windows Path Environment Variable works without this change for me – ruslo Nov 29 '15 at 11:05

Just thought I'd add this answer in case it helps anyone who's looking for it. If you use chere (which adds a "Bash prompt here" option to the right-click context menu of any folder), you can set it to zsh ("Zsh Prompt Here") with:

chere -i -t mintty -s zsh
share|improve this answer

If you want to use Cygwin shell inside the IDE Intellij, then use following setup inside settings/tools/terminal

c:\cygwin\bin\zsh.exe -l -i

This will embed the cygwin shell inside intellij instead of spawning a new window

share|improve this answer

Assuming you're interested in changing the shell used in mintty/Cygwin Terminal, it first checks the SHELL environment variable, then the (now nonexistent) passwd file, then falls back to /bin/sh, which is what it seems to be doing by default.

I was able to set the SHELL environment variable in Windows to /usr/bin/zsh and it worked without any other changes. I just changed it for my Windows user, not globally.

Setting an environment variable probably varies for different versions of Windows. Try searching for "environment" in your Windows Control Panel. For me, under Windows 7, it was Control Panel → System → Advanced System Settings, which brings up the System Properties control panel/dialog, then the Advanced tab, then the Environment Variables button, which brings up the Environment Variables dialog, then create a new user variable named SHELL with the value /usr/bin/zsh. Then OK back out of all of that and start a new mintty.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.