Respostas:
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 o cygwin.bat para executar em zsh -l -i
vez de bash --login -i
e ele será executado como um shell de login.
Obviamente, se você deseja executar vários shells na inicialização, basta criar um conjunto de .bat
arquivos para carregar diferentes shells. ( sh
, ksh
, csh
, fish
Etc)
Eu senti que deveria atualizar isso para fornecer informações sobre como fazer isso sem, chsh
mas ainda assim, no final do Unix. Edite o /etc/passwd
arquivo e substitua as ocorrências de /bin/bash
por /bin/zsh
. (Isso é efetivamente o chsh
que faria, mas dessa forma você faria para todos os usuários de uma só vez.)
mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
e edite o /etc/passwd
arquivo recém-criado
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.
Acabei de adicionar o bin
diretó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.
/bin/zsh
vez de zsh
.
the bin directory in the cygwin directory to my Windows Path Environment Variable
funciona sem essa mudança para mim
i
não é necessário porque será um shell de login e não interactive
.
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.
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/zsh
e 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 SHELL
com o valor /usr/bin/zsh
. Então, OK, retire tudo isso e comece uma nova casa da moeda.