zsh com o Cygwin

34

Como posso configurar o zsh como o shell padrão no Cygwin?

    
por simao 21.02.2011 / 15:29

7 respostas

45

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

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

É claro que, se você deseja executar vários shells a partir da inicialização, basta criar um conjunto de arquivos .bat para carregar shells diferentes. ( sh , ksh , csh , fish etc)

Atualizar ...

Senti que deveria atualizar isso para fornecer informações sobre como fazer isso sem chsh , mas ainda fazendo isso no final do Unix. Edite o arquivo /etc/passwd e substitua as ocorrências de /bin/bash por /bin/zsh . (Isso é efetivamente o que o chsh faria, mas dessa forma você faria isso para todos os usuários de uma só vez.)

    
por 21.02.2011 / 15:40
17

Se eu leio sua pergunta corretamente, você está procurando por algo diferente do que chere fornece (o que, garantido, é bem legal por si só).

A versão atual do Cygwin não tem um arquivo / etc / passwd , e o sistema em que estou trabalhando tem informações de 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 está embutido no script startxwin , nem é codificado em nenhum arquivo .bat. Acontece que você não precisa mexer com arquivos .bat.

Pesquisando como alterar meu shell, encontrei alguns conselhos sobre mkpasswd

Eu adicionei ao mix.

A página do homem 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.

(eu não sei porque o espaçamento é tão "off" ...)

Eu então usei o seguinte comando:

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

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

E isso, eu acho, é o que você pediu.

    
por 20.03.2015 / 04:20
17

Acabei de adicionar o diretório bin no diretório cygwin à minha Variável de Ambiente de Caminho do Windows e criar 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.

    
por 26.05.2015 / 22:33
5

Copiado de minha resposta no estouro de pilha :

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

db_shell: /usr/bin/zsh

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

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

1 A documentação do mkpasswd diz isso:

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.

Não consigo encontrar nenhum raciocínio sólido no guia do usuário , além de uma menção de que você terá que regenerar os arquivos / etc / passwd e / etc / group se seus usuários e grupos mudarem, o que eu suponho ser uma razão decente o suficiente. Eu posso dizer que o processo é um pouco propenso a erros para iniciantes.

    
por 14.06.2016 / 16:44
4

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

Consegui definir a variável de ambiente SHELL no Windows como /usr/bin/zsh e funcionou sem outras alterações. Acabei de alterá-lo para o meu usuário do Windows, não globalmente.

Definir 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, foi 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. uma nova variável de usuário chamada SHELL com o valor /usr/bin/zsh . Em seguida, retome tudo isso e comece uma nova cédula.

    
por 15.01.2016 / 22:03
1

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

chere -i -t mintty -s zsh
    
por 06.11.2014 / 18:17
0

Se você quiser usar o shell Cygwin dentro do IDE Intellij, use a seguinte configuração dentro de settings / tools / terminal

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

Isto irá embutir o shell cygwin dentro do intellij ao invés de gerar uma nova janela

    
por 10.01.2016 / 12:24