zsh com Cygwin


Respostas:


45

A menos que você esteja usando o cygwin como um ambiente multiusuário (nesse caso, use chshcomo faria em um ambiente padrão).

Caso contrário, basta alterar o cygwin.bat para executar em zsh -l -ivez de bash --login -ie ele será executado como um shell de login.  

Obviamente, se você deseja executar vários shells na inicialização, basta criar um conjunto de .batarquivos para carregar diferentes shells. ( sh, ksh, csh, fishEtc)

Atualizar...

Eu senti que deveria atualizar isso para fornecer informações sobre como fazer isso sem, chshmas ainda assim, no final do Unix. Edite o /etc/passwdarquivo e substitua as ocorrências de /bin/bashpor /bin/zsh. (Isso é efetivamente o chshque faria, mas dessa forma você faria para todos os usuários de uma só vez.)


15
Não existe mais um / etc / passwd no cygwin por padrão, e o chsh não é mais suportado. Esta resposta não ajuda (10 de abril de 2014).
Jeff Snider

Vá para casa @THESorcerer você está bêbado
ocodo 27/10

2
@JeffSnider execute mkpasswd -l -p "$(cygpath -H)" > /etc/passwde edite o /etc/passwdarquivo recém-criado
BrunoLM

17

Se eu li sua pergunta corretamente, você está procurando outra coisa além do que a chere fornece (o que, é verdade, é bem legal por si só).

A versão atual do Cygwin não possui um arquivo / etc / passwd , e o sistema no qual estou trabalhando possui informações da conta do Windows em um banco de dados de domínio fora do meu controle. Conseqüentemente, o chsh não é mais suportado.

Também descobri que o bash não é codificado no script startxwin , nem em qualquer arquivo .bat. Acontece que você não precisa mexer nos arquivos .bat.

Procurando como mudar meu shell, encontrei alguns conselhos sobre o mkpasswd

Eu adicionei à mistura.

A página de manual dizia:

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.

(Não sei por que o espaçamento é tão "desligado" ...)

Eu então usei o seguinte comando:

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

Na próxima vez que você abrir um Terminal Cygwin, ele irá direto para o zsh

E acho que foi isso que você pediu.


17

Acabei de adicionar o bindiretório no diretório cygwin à minha Variável de ambiente de caminho do Windows e, em seguida, crie um atalho para:

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

ou apenas altere o atalho padrão do menu iniciar do cygwin para o mesmo.


2
Eu tive que usar em /bin/zshvez de zsh.
kraiz

11
the bin directory in the cygwin directory to my Windows Path Environment Variablefunciona sem essa mudança para mim
ruslo

o inão é necessário porque será um shell de login e não interactive.
Timo

7

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 / zsh

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.


Isso deve ser marcado como aceito.
Arda

4

Supondo que você esteja interessado em alterar o shell usado no mintty / Cygwin Terminal, ele primeiro verifica a variável de ambiente SHELL, depois o arquivo passwd (agora inexistente) e depois volta para / bin / sh, que é o que parece estar fazendo por padrão.

Eu era capaz de definir a variável de ambiente SHELL no Windows para /usr/bin/zshe funcionou sem quaisquer outras alterações. Acabei de mudar para o meu usuário do Windows, não globalmente.

A configuração de uma variável de ambiente provavelmente varia para diferentes versões do Windows. Tente procurar por "ambiente" no seu Painel de Controle do Windows. Para mim, no Windows 7, era Painel de controle → Sistema → Configurações avançadas do sistema, que exibe o painel de controle / caixa de diálogo Propriedades do sistema, a guia Avançado e o botão Variáveis ​​de ambiente, que exibe a caixa de diálogo Variáveis ​​de ambiente e, em seguida, crie uma variável de usuário nova chamada SHELLcom o valor /usr/bin/zsh. Então, OK, retire tudo isso e comece uma nova casa da moeda.


Agora isso deve ser votado profusamente! A maneira mais simples que não atrapalha as maquinações internas da Cygwin e é facilmente reversível!
pepoluan 24/09/16

1

Apenas pensei em adicionar esta resposta, caso isso ajude quem está procurando. Se você usar o chere (que adiciona uma opção "Bash prompt here" ao menu de contexto de qualquer pasta), você pode configurá-lo para zsh ("Zsh Prompt Here") com:

chere -i -t mintty -s zsh

0

Se você deseja usar o shell Cygwin dentro do IDE Intellij, use as seguintes configurações em settings / tools / terminal

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

Isso incorporará o shell cygwin dentro do intellij, em vez de gerar uma nova janela

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.