Como fazer o zsh funcionar como um shell de login no Mac OS X (no iTerm)?


149

Quando o zsh é definido como um shell de login no Mac OS X, quando é iniciado pelo iTerm, o zsh não considera que está sendo executado como um shell de login, embora tenha sido iniciado como '-zsh' ('-' é colocado como primeiro caractere de arg [0]), o que significa que ele deve iniciar como um shell de login.

Portanto, quando defino o shell de login como bash, o bash reconhece esse primeiro '-' em $ 0 e é executado como um shell de login, mas o zsh não, embora pareça que deveria.

Existe uma maneira de fazer o zsh reconhecer o '-' no arg [0] ou fazer o iTerm executar o shell com um argumento de linha de comando --login?


2
Sei que já faz um tempo desde que isso foi feito, mas considere aceitar a resposta de @Harold Putman. É o único que aborda a pergunta.
Craig S. Cottingham

Respostas:


106

No iTerm -> Preferências -> Guia Perfis -> Seção Geral defina Comando como: / bin / zsh --login

/ bin / zsh --login


1
O iterm2 parece não ter essa opção na guia Geral. Alguma idéia de como obter no iterm2 sem alterar o shell de login?
Lloyd Dewolf

6
É a guia geral na guia Perfis.
precisa

Aha! Isso é confuso, pois existe uma guia Geral e um Perfis> Geral.
Lloyd Dewolf

2
ou no meu caso/usr/local/bin/zsh --login
Yar

Estou usando isso para alterar meu shell em vez de editar o / etc / shells, pois isso deve impedir que um problema com o meu shell se torne inutilizável após uma atualização.
Sal

220
chsh -s $(which zsh)

Você será solicitado a fornecer sua senha, mas depois de atualizar suas configurações, todas as novas sessões do iTerm / Terminal iniciadas nessa máquina serão padronizadas para zsh.


2
Por favor, leia a pergunta primeiro. O problema não está em definir o shell padrão, o problema é que o zsh não está detectando que ele foi iniciado como um shell de login.
Ivan Tarasov

1
Ah, minhas desculpas. Você tentou usar o sinalizador -i para forçar o zsh a iniciar no modo interativo?
Damien Wilson

11
Sua resposta faz o zsh funcionar como um shell de login no Mac OS X no iTerm. Simplesmente não funciona da maneira que você descreve como tentar. Mas resolve o problema que você questiona (no título, e não no corpo) apresenta. A questão com a qual você termina no corpo é uma questão completamente diferente. Se essa é sua pergunta real (em vez de como fazer o zsh funcionar como shell de login), talvez você deva reformular a pergunta no título.
Iconoclast

45
Se chshlhe diz algo como "shell fora do padrão", significa que você precisa adicionar o caminho do novo shell /etc/shells. Isso pode acontecer se você estiver mudando, por exemplo, para uma versão do zsh instalada pelo homebrew, que a coloca /usr/local/bin/zsh.
shovavnik

1
chsh -s $(which zsh)pode ser usado para garantir o caminho correto.
Daniel Doezema

56

Vá para o painel Usuários e grupos das Preferências do sistema -> selecione o usuário -> clique no cadeado para fazer alterações (canto inferior esquerdo) -> clique com o botão direito do mouse no usuário atual, selecione Opções avançadas ... -> selecione o Shell de logon: / bin / zsh e OK


3
Isso salvou meu dia. Estou no osx mavericks.
Qed

Isso funciona para o zsh padrão e não para o instalado pelo brew.
Imam Bux

19

O comando para alterar o shell na inicialização é chsh -s <path_to_shell>. Os shells padrão no mac OS X são instalados dentro do bindiretório, portanto, se você deseja alterar para o padrão zsh, use o seguinte

chsh -s /bin/zsh

Se você estiver usando uma versão diferente zsh, poderá ser necessário adicionar essa versão /etc/shellspara evitar a mensagem shell não padrão. Por exemplo, se você deseja a versão do home-brew, zshé necessário adicionar /usr/local/bin/zshao arquivo mencionado anteriormente, o que você pode sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"executar em um comando e executar

chsh -s /usr/local/bin/zsh

Ou se você quiser fazer a coisa toda em um comando, basta copiar e colar isso se você já tiver o zsh instalado

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh

2
Não acho justo rebaixar esta resposta. Adereços, pois é o único que menciona /etc/shellsno corpo da resposta em si.
heymatthew

1
@heymatthew, o motivo pelo qual está sendo votado abaixo é porque não respondeu à pergunta. Respondeu a uma pergunta não relacionada completamente diferente.
Tabitha

17

Você já tentou editar a entrada do shell nas configurações da conta .

Vá para as preferências de Contas, desbloqueie e clique com o botão direito na sua conta de usuário para a caixa de diálogo Configurações avançadas . Seu shell deve ser / bin / zsh e você pode editar essa chamada adequadamente (por exemplo, adicione o argumento --login).


Infelizmente, isso não funciona: eu posso definir qualquer shell que eu goste de usar chsh (desde que esse shell esteja listado em / etc / shells); no entanto, não é possível adicionar argumentos de linha de comando ao shell na caixa de diálogo Preferências avançadas (falha no iTerm para iniciar o shell).
Ivan Tarasov

Alguns dos a sintaxe mudou no OS X, mas a essência é definir o seu shell padrão para ser / bin / zsh como Brian indica acima
engineerDave

7
Eu amo então. Eu usei essa resposta agora e só então percebi que a escrevi há quase 4 anos!
precisa

-2

Use o loginutilitário para criar um shell de logon. Suponha que o usuário no qual você deseja efetuar login tenha o nome de usuário Alice e que o zsh esteja instalado /opt/local/bin/zsh(por exemplo, uma versão mais recente instalada via MacPorts). No iTerm 2, vá para Preferências, Perfis, selecione o perfil que deseja configurar e digite Comando :

login -pfq Alice /opt/local/bin/zsh

Veja man loginpara mais detalhes sobre as opções.


Isso é 100%, não é uma resposta. Sim mudará qual shell você gera por padrão, mas isso não é uma resposta sobre como criar uma instância de "login" de um shell, ou seja, recursos de todas as variáveis ​​do zero.
Tabitha
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.