Ich programmiere ein .sh-Skript, das irgendwann die Shell des Benutzers in / bin / zsh ändert. Der Befehl ist natürlich der folgende:
%Vor% Dies fragt jedoch nach dem Passwort des Benutzers, und ich möchte es nur ausführen, wenn die Shell des aktuellen Benutzers nicht bereits /bin/zsh
ist. Dazu brauche ich einen Befehl, der mir die aktuelle Shell mitteilen und mit "/bin/zsh"
oder etwas Ähnlichem vergleichen würde. Ich fand, es gibt eine c getusershell
-Funktion, 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 Angabe in /etc/passwd
. Die Logik dahinter ist, dass das Skript die bevorzugte Shell des Benutzers so ändert, dass es zsh ist, und ich möchte nur, dass das Skript zuerst prüft, ob es bereits zsh ist.
Sie sollten nicht davon ausgehen, dass /etc/passwd
der Speicherort der Shell des Benutzers ist.
Ich würde das verwenden:
%Vor%Bearbeiten: Beachten Sie, dass getent nur auf Solaris, BSDs und GNU / Linux-basierten Betriebssystemen implementiert ist.
AIX, HP-UX und OS X haben ihre eigenen Möglichkeiten, dies zu tun (bzw. lsusers -c
, pwget -n
und dscl ...
). Daher sollte dieser Befehl erweitert werden, wenn diese Betriebssysteme unterstützt werden sollen.
Der folgende Befehl gibt Ihnen die aktuelle Shell (in der CMD-Zelle):
%Vor% Dies setzt voraus, dass Perl installiert, richtig konfiguriert und in Ihrem $PATH
ist, was eine ziemlich sichere Wette auf die meisten modernen Unix-ähnlichen Systeme ist. (Es ist wahrscheinlich eine sicherere Wette, als dass getent
verfügbar ist oder dass Benutzerinformationen tatsächlich in der Datei /etc/passwd
gespeichert sind oder dass der Wert von $SHELL
nicht geändert wurde.)
$<
ist die echte UID des aktuellen Prozesses. getpwuid()
gibt ein Array von Werten aus /etc/passwd
oder zurück, egal welche anderen Mechanismen das System verwendet (NIS, LDAP). Element 8 dieses Arrays ist die Login-Shell des Benutzers.
Das Obige kann leicht verkürzt werden zu:
%Vor%oder
%Vor% Die Gründe für den unären Operator +
oder die zusätzlichen Klammern sind ziemlich unklar.
Tags und Links shell