Ich habe eine USER
Variable in meinem Skript, und ich möchte seinen HOME
Pfad basierend auf der USER
Variablen sehen. Wie kann ich das machen?
bash
shell-script
users
MatthewRock
quelle
quelle
~foo
mit Variablen in verwendenbash
. Jedenfalls nicht direkt.~
scheint sich jedoch zu erweitern, und ein anderes angegebenes Verhalten des Tilde-Präfixes soll durch einen Pfadnamen des anfänglichen Arbeitsverzeichnisses ersetzt werden, das mit dem Anmeldenamen verknüpft ist, der mit dergetpwnam()
Funktion erhalten wurde, und daher ist die Suche wahrscheinlich ziemlich gut. ich mag allerdings keine tab-erweiterungen - ich tippe gerne tabs.Mit können Sie das Basisverzeichnis
eval
einer Person abrufen.Zumindest für lokale Benutzer funktioniert dies auf jeden Fall. Ich weiß nicht, ob Remote-Benutzer wie LDAP damit umgehen
eval
.quelle
eval
wird benötigt. Bash wird~foo
nach variabler Erweiterung nicht verarbeitet .USER
.$USER
dehnt sich auf nur eine einzige Kette von Buchstaben.Der übliche Ort ist
/home/$USER
, aber das muss nicht universell sein. Der endgültige Ort für die Suche nach solchen Informationen befindet sich in der Datei/etc/passwd
.Diese Datei ist weltweit lesbar (jeder kann sie lesen), sodass jeder Benutzer Zugriff auf ihren Inhalt hat.
Wenn $ USER in der Datei vorhanden ist, ist der vorletzte Eintrag das Benutzerverzeichnis HOME.
Dadurch wird der Eintrag ausgewählt und das HOME-Verzeichnis gedruckt:
Bei komplexeren (entfernten) Systemen ist getent der übliche Befehl, um Benutzerinformationen vom NSS-System (Name Service Switch Libraries) abzurufen.
Ein Befehl von
Liefert gleichwertige Informationen (falls verfügbar).
quelle
Wenn der Benutzer nicht existiert,
getent
wird ein Fehler zurückgegeben.Hier ist eine kleine Shell-Funktion, die den Exit-Code von nicht ignoriert
getent
:Hier ist ein Anwendungsbeispiel:
quelle
Wenn Sie als root angemeldet sind,
USER
das Kennwort kennen oderUSER
kein Kennwort haben, ist Folgendes eine weitere Option:su
Wenn das StandardverhaltenUSER
undefiniert oder leer ist,su
wird versucht, den Befehl als root auszuführen.Wenn der Wert
USER
kein gültiger Benutzername ist, dann wird ein entsprechender Fehler ausgelöst werden:su: user <user> does not exist
.Hier gibt es bereits viele gute Antworten, aber dies kann trotzdem jemandem helfen.
quelle