
Ich versuche, das Home-Verzeichnis eines Benutzers in einer users.txt-Datei zu speichern, aber ich speichere immer nur mein eigenes. Das Skript fordert den Benutzer auf, seinen Benutzernamen einzugeben, den ich in $username gespeichert habe. Wenn ich ausführe
ls ~ >> users.txt
Es zeigt ls home/student/am1014
(das ist mein Benutzername)
Ich gehe davon aus, dass ich sudo zum Speichern verwenden muss, bin mir aber nicht sicher, wie.
Antwort1
In:
sudo -u joe ls ~
~
wird von Ihrer Shell erweitert, bevor der Befehl ausgeführt wird (hier sudo
), sodass tatsächlich Folgendes ausgeführt wird:
sudo -u joe ls /home/me
So listen Sie den Inhalt des joe
Home-Verzeichnisses auf:
ls ~joe
Oder wenn Sie keinen Lesezugriff auf sein Home-Verzeichnis haben:
sudo -u joe ls ~joe
Oder für eine Shell, diealsjoe
um das zu erweitern ~
:
sudo -u joe sh -c 'ls ~'
Beachten Sie, dass Sie diesen Ansatz außer in csh
/ tcsh
/ zsh
nicht verwenden können, ls ~joe
wenn der Name des Benutzers in einer Variablen steht. Abhängig von der Shell
user=joe
echo ~$user
/home/mejoe
würde entweder oder ausgeben ~joe
. In würde bash
, wenn ein Benutzer (buchstäblich) aufgerufen wurde $user
, sein Home-Verzeichnis zurückgegeben.
Hierfür benötigen Sie:
eval "ls ~$user"
(Sie hätten $user
vorher sichergestellt, dass es einen gültigen Benutzernamen enthält).
Antwort2
Der folgende Befehl liest /etc/passwd
und gibtusername : home-dir
awk -F: '{print $1":" $6}' /etc/passwd
Die Ausgabe sieht ungefähr so aus:
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
games:/usr/games
Sie können die Ausgabe folgendermaßen in eine Datei umleiten:
awk -F: '{print $1":" $6}' /etc/passwd > result.txt