chsh non cambia $ SHELL


9

Sto $SHELLriscontrando alcune difficoltà nel modificare il valore dell'app iTerm di OSX. iTerm sta iniziando /bin/zsh, ma il valore di $SHELLnon sembra cambiare.

Quello che ho fatto:

  1. "Comando" modificato come /bin/zshnella finestra di configurazione di iTerm.
  2. Eseguito chshper cambiare la shell in /bin/zsh.
  3. Confermato iTerm è avviato /bin/zsh

NOTA n. 1: nell'app terminale stock di OSX, "Terminal.app":

echo $SHELL
/bin/zsh

NOTA n. 2: nella famosa app per terminali di OSX, "iTerm.app":

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made

1
Hai guardato dentro /etc/shells? Il manuale afferma che se la shell specificata non si trova in quel file, non è considerata una shell standard.
Bob Dalgleish,

Risposte:


5

Il problema erano le impostazioni in conflitto dell'app "iTerm" con la shell. Per risolvere, ho ripristinato il comando "login shell" nella finestra delle preferenze di iTerm:

iTerm.app -> Preferenze -> Profili -> Generale -> Comando -> Fai clic su "Shell di accesso"

Quindi, l'ho eseguito chshper modificarlo come /bin/zsh.

Per riprodurre il problema (avendo $ SHELL impostato come /bin/bash/, anche se la shell di login è /bin/zsh), ho dovuto cambiare l'impostazione "iTerm" in "Comando: / bin / zsh /".


1

Il -sflag cerca chshsolo di cambiare la shell, e probabilmente fallisce a causa di Open Directory: il solito sistema "chsh" di UNIX modifica la /etc/passwdvoce. Tuttavia, sono stato in grado di eseguire chshsenza argomenti, il che mi ha dato un editor e le seguenti informazioni:

# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:

Sono stato in grado di modificare la voce "Shell:" /bin/zshe le successive finestre del Terminale si sono aperte con un prompt Z-shell.


Ho provato chshsenza litigi. Ancora niente fortuna. La variabile non cambia. In effetti, quando l'editor è stato caricato, ha mostrato /bin/zsh.
melvynkim,

Prova a cambiare la shell con l'editor. Ho fatto una mia cattura dello schermo cambiando da / bin / tcsh a / bin / zsh e ritorno. bonmot.ca/~nevin/chsh.mov
Nevin Williams

Grazie mille per aver dedicato del tempo alla registrazione postando il tuo screencast! La tua soluzione dovrebbe funzionare su altri emulatori di terminale, ma non ero in grado di cambiare $SHELLsu iTerm. Si prega di fare riferimento alla mia risposta per i dettagli .. Grazie!
melvynkim,

1

Cerca qui l'eccellente spiegazione e soluzione pubblicata da @ mklement0 [in relazione a un bashproblema di aggiornamento.

Ho avuto un problema simile nel fare il contrario sul mio sistema (OS X 10.10.1): rendere di bashnuovo la shell di accesso predefinita dopo l'installazione oh-my-zsh, che ha reso zshl'impostazione predefinita, e quindi l'aggiornamento bashda 3.2.53 a 4.3.30 usando Homebrew ( perché Apple spedisce Yosemite con una bashversione precedente?).

Penso che la SHELLvariabile di ambiente rifletta ma non controlli la shell di accesso predefinita effettiva per l'utente. Ad esempio, se, diciamo, bashfosse il tuo valore predefinito e apri una nuova bashfinestra della shell dal terminale, allora $ export SHELL="/bin/zsh"; echo "$SHELL"mostrerebbe /bin/zshma non si verificherà alcuna modifica effettiva perché se apri una nuova finestra della shell dal terminale e lo $ echo $0fai, vedresti -bash( $0contiene il nome e il percorso del comando che ha avviato la finestra della shell, in questo caso bash, e -accanto ad essa indica che si tratta di una shell di accesso).

Come ha sottolineato @ mklement0, la shell di accesso predefinita effettiva per l'utente è controllata dalla UserShellproprietà nel record dell'utente nel database interno del sistema - questo può essere interrogato e aggiornato usando l'utilità della riga di comando dscl. Queste informazioni passeranno all'app del tuo terminale quando apri una finestra della shell.

Ciò che chsh -s /bin/zshfa è cambiare questa UserShellproprietà per impostarla su zsh: puoi verificarla facendo dscl . -read /Users/$USER/ UserShellimmediatamente dopo, e vedrai UserShell: /bin/zsh. Ma la modifica non viene effettuata nella finestra corrente, finché non fai qualcosa come exec su - $USERsuggerito da @ mklement0, o fino a quando non chiudi e apri una finestra shell.


0

Prova a eseguire il comando: chsh -s /bin/zshdal terminale Mac predefinito.


1
Che cosa fa diversamente dall'OP?
JMY1000,

@ JMY1000 Se si tenta di eseguire quel comando da iTerm, le modifiche non vengono riflesse. Dovresti riuscire a farlo funzionare eseguendolo dal terminale predefinito di Mac.
Mohitmayank,
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.