2012-04-07 9 views
0

Ich möchte das Home-Verzeichnis eines Benutzers eines Unix-System zu bekommen. Warum funktioniert folgende Arbeiten:Bash Programmierung STDIN Redirect

# sudo su $offender -c "bash -s < <(echo echo \$HOME)" 
sh: Syntax error: redirection unexpected 
+0

Warum funktioniert 'sudo su $ tender -c 'echo $ HOME'' nicht für Sie? – cHao

+0

Ich bekomme einen Fehler "Umleitung unerwartet" –

+0

Voll erwartet. '<<' macht nicht viel Sinn. Was ich frage ist, warum all die Muschelgymnastik? Es scheint, dass Sie nicht alle Umleitungs- und Echobefehle brauchen und so ... – cHao

Antwort

1

es funktioniert für mich in Ubuntu und Fedora sudo su $offender -c "echo \$HOME" mit

Sie könnten Beitel es auch von/etc/passwd-Datei wie folgt:

grep "^$offender" /etc/passwd | cut -d':' -f6 
+0

Manchmal entgeht mir das Offensichtliche. : - / –

0

Sie wissen nicht wirklich, warum es nicht funktioniert, aber hier ist ein Weg, um das Home-Verzeichnis zu erhalten, ist nicht mit einer Schale als dieser Benutzer Laichen:

getent passwd "${offender:?No Offending Account Given}" | awk -F':' 'NR==1{print $6}' 
+0

Oder mach 'sudo su $ {tender} -c' bash - c "echo $ HOME" 'oder 'sudo su $ {tender} -c" bash -s <<<' echo \ $ HOME '"' wenn Sie darauf bestehen, einen Prozess als den Benutzer auszuführen, für den Sie Informationen erhalten möchten . – Ariel

+0

das funktioniert auch, danke !!! –

0

Das direkte Problem ist, dass sh Prozesssubstitution nicht erkennt (die <(echo $HOME)) Notation, auch wenn es eine Verbindung zu bash ist.

Es scheint wie ein ziemlich brutaler Weg, um die Informationen zu erhalten. Nicht:

eval echo ~$offender 

arbeiten für Sie?