chsh non cambia $ SHELL

8

Ho qualche difficoltà a cambiare il valore di $SHELL nell'app iTerm di OSX. iTerm sta iniziando in /bin/zsh , ma il valore di $SHELL non sembra cambiare.

Cosa ho fatto:

  1. Modificato "comando" come /bin/zsh nella finestra di configurazione di iTerm.
  2. Eseguito chsh per cambiare la shell in /bin/zsh .
  3. Confermato iTerm è iniziato in /bin/zsh

NOTA 1: nell'app del terminale azionario di OSX, "Terminal.app":

echo $SHELL
/bin/zsh

NOTA 2: nella famosa applicazione terminale 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
    
posta melvynkim 25.05.2014 - 02:20
fonte

4 risposte

4

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 -> Preferences -> Profiles -> General -> Command -> Click on "Login shell"

Quindi, ho eseguito chsh per modificarlo come /bin/zsh .

Per riprodurre il problema (avendo $ SHELL impostato come /bin/bash/ , anche se la shell di login è /bin/zsh ), ho dovuto semplicemente cambiare "iTerm" tornando a "Command: / bin / zsh /".

    
risposta data 26.05.2014 - 20:36
fonte
1

Guarda qui per l'eccellente spiegazione e soluzione pubblicata da @ mklement0 [in relazione a un problema di aggiornamento di bash .

Ho avuto un problema simile nel fare il contrario sul mio sistema (OS X 10.10.1): rendendo bash la shell di login predefinita dopo aver installato oh-my-zsh , che ha reso zsh l'impostazione predefinita e quindi l'aggiornamento di bash da 3.2.53 a 4.3.30 utilizzando Homebrew (perché Apple spedisce Yosemite con una vecchia versione bash ?).

Penso che la variabile di ambiente SHELL rifletta, ma non controlla la shell di login predefinita effettiva per l'utente. Ad esempio, se, per esempio, bash era il tuo valore predefinito e aprivi una nuova finestra di shell bash dal terminale, $ export SHELL="/bin/zsh"; echo "$SHELL" mostrerebbe /bin/zsh ma non si verificheranno cambiamenti effettivi perché se apri una nuova finestra shell dal terminale e fai $ echo $0 allora vedresti -bash ( $0 contiene il nome e il percorso del comando che ha avviato la finestra della shell, in questo caso bash , e il - accanto indica che è un shell di accesso).

Come @ mklement0 ha sottolineato che la shell di login predefinita reale per l'utente è controllata dalla proprietà UserShell nel record dell'utente nel database interno del sistema - questa può essere interrogata e aggiornata utilizzando l'utilità della riga di comando dscl . Questa informazione passerà alla tua app terminale quando apri una finestra della shell.

Ciò che chsh -s /bin/zsh fa è modificare questa proprietà UserShell per impostarla su zsh - puoi controllare questo facendo dscl . -read /Users/$USER/ UserShell subito dopo, e vedrai UserShell: /bin/zsh . Ma la modifica è non effettuata nella finestra corrente, finché non fai qualcosa come exec su - $USER come suggerito da @ mklement0, o finché non chiudi e apri una finestra della shell.

    
risposta data 29.12.2014 - 00:41
fonte
0

Il flag -s per chsh tenta solo di cambiare la shell e probabilmente fallisce a causa di Open Directory: il solito sistema UNIX 'chsh' modifica la voce /etc/passwd . Tuttavia, sono stato in grado di eseguire chsh senza argomenti, 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:" in /bin/zsh e le successive finestre di Terminal aperte con un prompt di Z-shell.

    
risposta data 25.05.2014 - 03:58
fonte
0

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

    
risposta data 07.02.2017 - 16:54
fonte

Leggi altre domande sui tag