Ermitteln Sie die Shell des aktuellen Benutzers

7

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.

    
Ernesto 05.06.2013, 15:18
quelle

6 Antworten

14

$SHELL gibt die Shell des aktuellen Benutzers zurück:

%Vor%     
Daniel 05.06.2013, 15:23
quelle
4

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.

    
jlliagre 05.06.2013 17:56
quelle
2

Der folgende Befehl gibt Ihnen die aktuelle Shell (in der CMD-Zelle):

%Vor%     
Ajitabh Mishra 05.06.2013 15:25
quelle
2
%Vor%

Oder wenn Sie den Benutzernamen in der Shell-Variable var :

haben %Vor%

Dies setzt voraus, dass /etc/passwd lokal abgeschlossen ist (im Gegensatz zur Bereitstellung von NIS; siehe Ihre /etc/nsswitch.conf und die entsprechende Manpage).

    
Jens 05.06.2013 15:21
quelle
0

Folgendes funktioniert:

%Vor%

Manchmal sind $ SHELL und Werte in / etc / passwd falsch.

    
cforbish 05.06.2013 15:35
quelle
0
%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.

    
Keith Thompson 05.06.2013 19:21
quelle

Tags und Links