Ich programmiere ein SH-Skript, das irgendwann die Shell des Benutzers in/bin/zsh ändern wird. Der Befehl ist natürlich wie folgt zusammen:Ermitteln der Shell des aktuellen Benutzers
chsh -s /bin/zsh
jedoch fragt das für das Kennwort des Benutzers, und ich möchte nur, um sie auszuführen, wenn die Shell des aktuellen Benutzers nicht bereits /bin/zsh
. Dazu brauche ich einen Befehl, der mir die aktuelle Shell mitteilen und mit "/bin/zsh"
oder etwas Ähnlichem vergleichen würde. Ich habe gefunden, dass es eine c getusershell
Funktion gibt, aber gibt es nicht eine Möglichkeit, dies aus einem Shell-Skript zu wissen?
Update: Entschuldigung, ich meine die Shell, die der Benutzer als seine bevorzugte Shell angegeben hat. Also ja, die in /etc/passwd
angegebene. Die Logik dahinter ist, dass das Skript die bevorzugte Shell des Benutzers als zsh ändern soll, und ich möchte nur, dass das Skript zuerst prüft, ob es bereits zsh ist.
grep/etc/passwd um die "offizielle" Shell des Benutzers zu erhalten. Beachten Sie jedoch, dass dieses Skript möglicherweise NICHT von dieser Shell ausgeführt wird. sie könnten sich sehr gut einloggen mit (sprich) demh, manuell bash ausführen und zu Korn shell, etc ... wechseln. –
@MarcB Wenn wir nur Linux unterstützen, ist es besser, 'getent passwd" $ USER "' zu verwenden als grep '/ etc/passwd', da getent whahtever in nsswitch konfiguriert (LDAP, NIS, etc) sucht, während grepping'/etc/passwd' nur auf Systemen funktioniert, die für _use_ '/ etc/passwd' konfiguriert sind. –
Was meinst du mit "aktuelle Shell"? Der aktuell in '/ etc/passwd' angegebene oder der aktuell ausgeführte? – Jens