So ändern Sie die Standard-Shell in ZSH - chsh sagt "ungültige Shell"

36

Ich habe ZSH auf einer meiner VMs installiert, wo ich es aus dem Quellcode kompiliert habe. Der Speicherort von ZSH ist, /usr/local/bin/zshwenn ich chsh -s /usr/local/bin/zshes ausgeben lasse chsh: /usr/local/bin/zsh is an invalid shell. Ich habe das auch mit sudo ausprobiert. Wie kann ich das ändern?

Zach Russell
quelle
mögliches Duplikat von Wo ändere ich meine Shell?
Mikel
6
@Mikel, nein, diese Frage lautet "Ich weiß nicht über chsh" und nicht " chshfunktioniert bei mir nicht".
CJM

Antworten:

48

Zsh hinzufügen zu /etc/shells:

command -v zsh | sudo tee -a /etc/shells

Sie können jetzt chsh verwenden, um zsh als Shell festzulegen:

sudo chsh -s "$(command -v zsh)" "${USER}"

Siehe diese Dokumentation: Ändern Ihrer Login-Shell

Biotherapie
quelle
8

Sie müssen hinzufügen /usr/local/bin/zshzu /etc/shells.

Adam Lang
quelle
3

Überprüfen Sie zunächst, ob von zshals gültige Shell aufgeführt wird

cat /etc/shells

Wenn zshnicht aufgeführt, installieren Sie es. Zum Beispiel, wenn Sie verwendenapt

sudo apt-get install zsh

Wiederholen Sie Schritt 1 und sehen Sie den Pfad von zsh. In meinem Fall ist beides /usr/bin/zshund /usr/zshaufgelistet. Wenn Sie, wie in @ Stéphane Chazelas im Kommentar erwähnt, die Shell von Grund auf kompilieren und installieren möchten, müssen Sie den Pfad hinzufügen /etc/shells.

Ändern Sie die Shell mit

chsh -s /usr/bin/zsh

Aus der Manpage :

-s, --shell SHELLDer Name der neuen Anmeldeshell des Benutzers. Wenn Sie dieses Feld leer lassen, wählt das System die Standardanmeldeshell aus.

Abmelden und erneut anmelden.

Sat Yam
quelle
Ja, wenn Sie die Shell als Teil eines Betriebssystempakets installieren, wird diese normalerweise durch das Betriebssystempaket hinzugefügt /etc/shells. Wenn Sie die Shell von Hand kompilieren und installieren, müssen Sie den Pfad auch /etc/shellsvon Hand zu sich selbst hinzufügen .
Stéphane Chazelas
Guter Punkt. Ich dachte an einen Paketmanager wie 'apt'. Ich habe die Antwort bearbeitet, um Ihren Punkt einzuschließen.
Sa Yam
Dies ist jedoch im Wesentlichen das, was die beiden anderen Antworten bereits gesagt haben.
Jeff Schaller