Como alterar o shell padrão no Cygwin?

29

Estou tentando mudar meu shell padrão de bash para zsh no cygwin.

  1. O comando unix normal chshnão está disponível no cygwin
  2. O arquivo etc / passwd parece não ser mais usado nas versões existentes do cygwin.

Então, de que outra forma o shell padrão pode ser alterado?

gyaani_guy
fonte

Respostas:

22

A resposta depende de como você inicia o Cygwin.

Se você iniciar o Cygwin com o Cygwin.bat , modifique a última linha de /Cygwin.bat(geralmente C:\cygwin\ou C:\cygwin64\).

Se você iniciar o Cygwin com mintty , adicione o shell como parâmetro. mintty /usr/bin/zsh -

Steven
fonte
2
Obrigado, estou usando o Conemu. Tive que alterar o sh.exepara zsh.exeem Configurações do Conemu> inicialização> tarefas> bash Cygwin Bash>set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\sh.exe --login -i
gyaani_guy
@gyaani_guy Estou apenas usando o ConEmu para executar CygWin\bin\zsh.exe. sh.exe --loginvai lançar o Bash, como você muda isso? Ou isso não importa, afinal? Eu imagino sh.exe --loginé desnecessariamente execução shantes zsh...
deed02392
@ deed02392 eu não estou certo que eu compreendo .. mas o comando exato que estou usando é set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\zsh.exe --login -ihth
gyaani_guy
@gyaani_guy obrigado, fiquei confuso porque no seu primeiro comentário você pareceu sugerir que começou com o zsh sh.exe. Agora eu percebo que eu simplesmente não ler a sua mensagem corretamente :-)
deed02392
3
O exemplo cintilante não funcionou para mim. Ele tinha problemas até que eu fiz-lhe um shell de login, acrescentando -l: mintty.exe -i /Cygwin-Terminal.ico /usr/bin/zsh -l -
Morgan Maio
18

Se você executar mintty.exediretamente ou executar o Cygwin Terminal no menu Iniciar ou na área de trabalho (que é um atalho para mintty.exe), poderá definir a variável de ambiente SHELL no Windows como /usr/bin/zsh.

No Windows 7:

  1. Pressione a tecla Windows.
  2. Comece a digitar "ambiente".
  3. Quando aparecer, selecione "Editar variáveis ​​de ambiente para sua conta".

O resto deve ser auto-explicativo.

dc46and2
fonte
5
Isso precisa seriamente de mais votos. Eu nunca vi isso documentado em nenhum lugar, e é obviamente o método pretendido.
Kevin Mills
11
Para aqueles que não desejam confiar na pesquisa para encontrar o painel apropriado, clique com o botão direito do mouse no menu Iniciar e selecione "Sistema" para iniciar o painel de controle do sistema. Em seguida, clique em "Configurações avançadas do sistema" na coluna do lado esquerdo. Na janela "Propriedades do sistema" exibida, clique em "Variáveis ​​de ambiente ..." para iniciar o editor de variáveis ​​de ambiente.
David C.
Funcionou perfeitamente!
bkunzi01
16

Copiado da minha resposta no Stack Overflow :


Em vez de criar um arquivo passwd, recomendado pelo Cygwin contra 1 , você pode editar o arquivo /etc/nsswitch.conf . Adicione ou edite a seguinte linha:

db_shell: / usr / bin / peixe

O lado negativo / negativo desse método é que, se você tiver vários usuários, essa alteração afetará todos eles. O lado positivo / negativo é que é simples demais. O único problema é que você precisa reiniciar o Cygwin.

Se você fazer uso mkpasswd após essa mudança, ele usará o seu novo shell padrão para todos os usuários que têm permissão para fazer logon.


1 A documentação do mkpasswd diz o seguinte:

Não use este comando para gerar um arquivo / etc / passwd local, a menos que você realmente precise de um. Consulte o Cygwin User Guide para mais informações.

Eu realmente não consigo encontrar nenhum raciocínio sólido no guia do usuário , exceto uma menção de que você precisará gerar novamente os arquivos / etc / passwd e / etc / group se seus usuários e grupos mudarem, o que eu acho que é bastante decente razão. Posso dizer que o processo é um pouco propenso a erros para iniciantes.

P Papai
fonte
7

Este é um truque: coloque isso como a primeira linha do seu ~/.bash_profile:

exec zsh
Glenn Jackman
fonte