Come far funzionare zsh come shell di login su Mac OS X (in iTerm)?


149

Quando zsh è impostato come shell di accesso su Mac OS X, quando viene avviato da iTerm, zsh non considera che viene eseguito come shell di accesso, sebbene sia avviato come '-zsh' ('-' è messo come primo carattere di arg [0]) che dovrebbe significare che dovrebbe iniziare come shell di login.

Quindi, quando imposto la shell di accesso su bash, bash riconosce questo primo "-" in $ 0 e viene eseguito come shell di accesso, ma zsh non lo fa, anche se sembra che dovrebbe.

C'è un modo per fare in modo che zsh riconosca '-' in arg [0], o far eseguire a iTerm la shell con un argomento da riga di comando --login?


2
So che è passato un po 'di tempo da quando è stato chiesto, ma per favore considera di accettare la risposta di @Harold Putman. È l'unico su cui affronta la domanda posta.
Craig S. Cottingham,

Risposte:


106

In iTerm -> Preferenze -> Scheda Profili -> Sezione generale imposta Comando su: / bin / zsh --login

/ bin / zsh --login


1
iterm2 non sembra avere questa opzione nella scheda Generale. Qualche idea su come ottenere in iterm2 senza cambiare la shell di login?
Lloyd Dewolf,

6
È una scheda generale nella scheda Profili.
Harold Putman,

Aha! È confuso che ci sia sia una scheda Generale che un profilo> Generale.
Lloyd Dewolf,

2
o nel mio caso/usr/local/bin/zsh --login
Yar

Sto usando questo per cambiare la mia shell piuttosto che modificare / etc / shells poiché questo dovrebbe impedire che un problema con la mia shell diventi inutilizzabile dopo un aggiornamento.
sal

220
chsh -s $(which zsh)

Ti verrà richiesta la password, ma una volta aggiornate le tue impostazioni tutte le nuove sessioni iTerm / Terminal che avvii su quella macchina verranno automaticamente impostate su zsh.


2
Per favore, leggi prima la domanda. Il problema non è nell'impostazione della shell predefinita, il problema è che zsh non sta rilevando che è stata avviata come shell di accesso.
Ivan Tarasov,

1
Ah, le mie scuse. Hai provato a usare il flag -i per forzare l'avvio di zsh in modalità interattiva?
Damien Wilson,

11
La sua risposta fa funzionare zsh come shell di login su Mac OS X in iTerm. Semplicemente non lo fa nel modo in cui descrivi il tentativo. Ma risolve il problema che si pone (nel titolo, piuttosto che nel corpo) presenta. La domanda con cui finisci nel corpo è una domanda completamente diversa. Se questa è la tua vera domanda (piuttosto che come far funzionare zsh come shell di login), forse dovresti riformulare la domanda nel titolo.
iconoclasta,

45
Se chshti dice qualcosa come "shell non standard", significa che devi aggiungere il percorso della nuova shell /etc/shells. Questo può accadere se stai cambiando, ad esempio, una versione di zsh installata da homebrew, che la inserisce /usr/local/bin/zsh.
shovavnik,

1
chsh -s $(which zsh)può essere utilizzato per garantire il percorso corretto.
Daniel Doezema,

56

Vai al riquadro Utenti e gruppi delle Preferenze di Sistema -> Seleziona l'utente -> Fai clic sul lucchetto per apportare modifiche (angolo in basso a sinistra) -> fai clic con il pulsante destro del mouse sull'utente corrente seleziona Opzioni avanzate ... -> Seleziona la shell di accesso: / bin / zsh e OK


3
Questo mi ha salvato la giornata. Sono su osx mavericks.
qed

Questo funziona per lo zsh predefinito non per quello installato da brew.
Imam Bux,

19

Il comando per cambiare la shell all'avvio è chsh -s <path_to_shell>. Le shell predefinite in mac OS X sono installate all'interno della bindirectory, quindi se si desidera cambiare l'impostazione predefinita zsh, utilizzare quanto segue

chsh -s /bin/zsh

Se stai usando una versione diversa di zshallora potresti dover aggiungere quella versione /etc/shellsper evitare il messaggio shell non standard. Ad esempio, se si desidera la versione di home-brew, zshè necessario aggiungere /usr/local/bin/zshal file di cui sopra che è possibile eseguire in un comando sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"e quindi eseguire

chsh -s /usr/local/bin/zsh

O se vuoi fare tutto in un solo comando, copialo e incollalo se hai già installato zsh

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

2
Non penso che sia giusto sottovalutare questa risposta. Puntelli in quanto è l'unico che menziona /etc/shellsnel corpo della risposta stessa.
heymatthew,

1
@heymatthew il motivo per cui è stato sottoposto a downgrade è perché non ha risposto alla domanda posta. Ha risposto a una domanda indipendente completamente diversa.
Tabitha,

17

Hai provato a modificare la voce della shell nelle impostazioni dell'account .

Vai alle preferenze Account, sblocca e fai clic con il pulsante destro del mouse sul tuo account utente per la finestra di dialogo Impostazioni avanzate . La tua shell dovrebbe essere / bin / zsh e puoi modificare quell'invocazione in modo appropriato (cioè aggiungere l'argomento --login).


Sfortunatamente, ciò non funziona: posso impostare qualsiasi shell che mi piace usare chsh (purché abbia questa shell elencata in / etc / shells), tuttavia non è possibile aggiungere argomenti della riga di comando alla shell nella finestra di dialogo Preferenze avanzate (iTerm non riesce per avviare la shell).
Ivan Tarasov,

Parte della sintassi è cambiata in OS X ma l'essenza è impostare la shell predefinita su / bin / zsh come Brian indica sopra
engineerDave

7
Amo così. Ho usato questa risposta proprio ora, e solo allora mi sono reso conto che l'ho scritta quasi 4 anni fa!
Brian Agnew,

-2

Utilizzare l' loginutilità per creare una shell di accesso. Supponiamo che l'utente a cui si desidera accedere abbia il nome utente Alice e che zsh sia installato /opt/local/bin/zsh(ad esempio, una versione più recente installata tramite MacPorts). In iTerm 2, vai su Preferenze, Profili, seleziona il profilo che desideri impostare ed entra in Comando :

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

Vedi man loginper maggiori dettagli sulle opzioni.


Questa non è una risposta al 100%. Sì cambierà la shell che genererai di default, ma questa non è una risposta su come creare un'istanza di "login" di una shell, ovvero risorse tutte le variabili da zero.
Tabitha,
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.