Rendere ZSH la shell predefinita in MacOSX [chiuso]


98

Ho installato zsh sul mio Mac. e ora voglio renderlo la shell predefinita invece di Bash. Ma mi sembra di incorrere nel seguente errore:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell

1
Cosa produce l' chsh -loutput? (Se non funziona, quali sono i contenuti di /etc/shells?) Sei sicuro che non funziona e non solo un avviso? L'aggiunta /usr/bin/zshlì fa funzionare questo?
Etan Reisner

1
chsh: l'opzione richiede un argomento - l utilizzo: chpass [-l location] [-u authname] [-s shell] [user]
Harsha MV

/ bin / bash / bin / csh / bin / ksh / bin / sh / bin / tcsh / bin / zsh
Harsha MV

Cosa c'è che non va /bin/zsh?
jxh

1
C'è un modo ufficiale per cambiare la shell predefinita in zsh ora. Consulta il documento Apple "Usa zsh come shell predefinita sul tuo Mac" support.apple.com/en-ca/HT208050
Anthonyeef

Risposte:


86

3 semplici passaggi:

  1. which zshquesto ti dà il tuo percorso per zsh
  2. Poi chsh -s /bin/zsh o sostituire il percorso al tuo zsh se diverso
  3. Riavvia la macchina

sì, ha funzionato. è specifico per Yosemite?
Harsha MV

2
No, non credo, era solo per tua informazione :)
Quentin Perez

8
Un altro commento pertinente sulla stessa vecchia domanda che dice di aggiungere /usr/bin/zshper /etc/shellsrisolvere il problema.
Brice

Funziona perfettamente
Olkunmustafa

1
Impostalo di conseguenza su / etc / shells! Cerca il percorso zsh con "$ nano / etc / shells". Il mio era in / bin / zsh invece di / usr / bin / zsh il 10.12.2
oikonomopo

187

La risposta corretta dovrebbe aver risolto il tuo problema:

chsh: / usr / bin / zsh: shell non standard

Il motivo per cui questo è il caso è perché chshaccetterà solo shell che sono definite nel file / etc / shells, come puoi vedere leggendo il manuale per chsh:

chsh accetterà il percorso completo di qualsiasi file eseguibile sul sistema. Tuttavia, emetterà un avviso se la shell non è elencata nel file / etc / shells.

Per risolvere questo problema e rendere zsh la shell predefinita, dovresti quindi:

$ sudo echo "$(which zsh)" >> /etc/shells
$ chsh -s $(which zsh)

Ovviamente, presumo che zshsia sulla tua strada qui. Questa soluzione funzionerà anche se, ad esempio, scegli di installare l'ultima versione zshcon brew install zsh.

EDIT (grazie per ThisIsFlorianK per il commento) :

A seconda della configurazione della shell potresti ricevere un messaggio che dice /etc/shells: Permission denied. Puoi trovare informazioni su questo problema qui. Per aggirare il problema, utilizza invece quanto segue:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)

4
questo è più accurato della risposta accettata a mio parere. supponendo che zsh sia installato in / usr / bin / zsh, le altre risposte non funzionano. Hanno lavorato per OP perché per impostazione predefinita, Apple installa zsh in / bin / zsh. Tuttavia, se si desidera utilizzare zsh di homebrew (che è installato in / usr / local / bin / zsh), questo sarebbe il modo corretto per farlo
verboze

Ho "bash: / etc / shells: Permission denied". La risposta tramite Preferenze di Sistema ha funzionato per me.
Ricardo Stuven

44
Se ottieni il /etc/shells: Permission denied==> Fallo invece: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK

1
stackoverflow.com/a/44547726/99834 - ha funzionato senza interferire con i file di sistema. L'unica cosa che manca è una versione CLI per fare la stessa operazione.
sorin

@sorin Questo è un vandalismo gratuito negativo o c'è qualcosa che non va nella risposta? I file di sistema sono file di testo modificabili per un motivo. chshè disponibile per impostazione predefinita per un motivo. Sebbene non ci sia nulla di intrinsecamente sbagliato nel fare clic su un sacco di menu per ottenere la stessa cosa, ciò non è solo non portabile e soggetto a errori, ma anche fuorviante in quanto nasconde agli utenti da dove proviene il cambiamento.
dangom

52

Sono stato in grado di farlo funzionare facendo quanto segue:

  1. Vai a Preferenze di Sistema
  2. Fare clic su "Utenti e gruppi"
  3. Fare clic sul lucchetto per apportare modifiche.
  4. Fare clic con il pulsante destro del mouse sull'utente corrente -> Opzioni avanzate
  5. Cambia la shell di accesso in / bin / zsh nel menu a discesa.
  6. Apri un nuovo terminale e verifica con echo $SHELL

4
se installi zsh tramite homebrew, verrà inserito zsh /usr/local/bin/zsh. Pertanto sarà necessario modificare /etc/shellsin sudo e aggiungere una voce per /usr/local/bin/zshprima di poter selezionare l'eseguibile zsh installato da hombrew
Baldy

7

Sul mio MacBook di lavoro ho dovuto fare questo:

sudo chsh -s /usr/local/bin/zsh my_user_name

Quindi ho dovuto creare un .bash_profilefile per far passare il mio terminale a z-shell ogni volta che lo apro:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile

L'ultima idea è stata presa in prestito da qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.