Ottieni home directory per nome utente


84

Voglio ottenere la home directory di qualsiasi utente con eco

echo ~puchuu
>> /home/puchuu

Ma non posso usare la variabile

echo ~$USER
>> ~puchuu
echo `echo ~$USER`
>> ~puchuu

Risposte:


86

Puoi usare eval:

eval echo ~$USER

Ma vedi il commento di Andrew e la risposta di Glenn di seguito.


8
In bash eval non è necessario con solo echo ~$usernameva bene, ma in sh eval è necessario se è una variabile
Felipe Alcacibar

Questo a volte dà il valore sbagliato, forse la cartella principale di un account precedente con lo stesso nome utente?
Andrew,

@AndrewMacFie: cosa intendi con "precedente"?
Choroba,

1
@choroba Aggiungi un utente, elimina l'utente, quindi aggiungi un utente con lo stesso nome utente. Se la cartella principale dell'utente è diversa la seconda volta, questo comando fornisce la cartella principale originale anziché quella corrente. La risposta di Glenn Jackman fornisce quella attuale.
Andrew,

Nota anche che se stai eval echo "~$USER"assumendo che $USERnon contenga caratteri speciali che la shell potrebbe interpretare. Ad esempio, se USER="foo\$bar", allora quando evalla shell sostituirà il $bartuo output che non è quello che vuoi. Fondamentalmente, se prendi questa strada, devi assicurarti che $USERsia un input sano. Il più delle volte probabilmente lo sarà, ma dovresti tenerlo a mente.
Zorawar,

65

Questo potrebbe funzionare per te:

homedir=$( getent passwd "$USER" | cut -d: -f6 )

Questo funzionerà anche con utenti che non sono te. Per esempio,

homedir=$( getent passwd "someotheruser" | cut -d: -f6 )

Questo è legittimo, usando getenvpiuttosto che supporre che la posizione di passwdsia anche un passo oltre che supporre che la posizione di casa sia/home/
Evan Carroll il

13

Sembra che tu sia quell'utente - perché no

echo $HOME

?


3
Questo non funzionerà se ti trovi in ​​un ambiente sudo e non hai passato sudo i flag -H o -i - $ HOME sarà comunque la home directory dell'utente precedente (sudo'ing).
Asfand Qazi,

1

Non so se aiuta, ma posizionare la tilde all'esterno dell'espressione funziona su ZSH ma non su Bash:

echo ~`echo $USER`

0

Una volta effettuato l'accesso, esegui cdper accedere alla tua home directory, quindi esegui pwdper stampare la directory di lavoro.


Non funzionerà; l'idea qui è di farlo in shell script, e presumibilmente senza richiedere le credenziali dell'utente in questione ...
SamB

-1 per lo stesso motivo menzionato da SamB. Ho modificato la tua risposta perché voglio che tu veda come utilizzare la formattazione di Markdown e che sia più conciso. Ti sei perso anche il metodo molto più semplice, che è giusto echo $HOME.
wjandrea,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.