Dapatkan direktori home dengan nama pengguna

84

Saya ingin mendapatkan dir home dari pengguna mana saja dengan gema

echo ~puchuu
>> /home/puchuu

Tapi saya tidak bisa menggunakan variabel

echo ~$USER
>> ~puchuu
echo `echo ~$USER`
>> ~puchuu
puchu
sumber

Jawaban:

86

Anda bisa menggunakan eval:

eval echo ~$USER

Tetapi lihat komentar Andrew dan balasan glenn di bawah ini.

choroba
sumber
8
Dalam bash eval tidak diperlukan hanya dengan echo ~$usernameapa-apa, tetapi dalam
shal
Ini terkadang memberikan nilai yang salah, mungkin folder rumah dari akun sebelumnya dengan nama pengguna yang sama?
Andrew
@AndrewMacFie: Apa yang Anda maksud dengan "sebelumnya"?
choroba
1
@choroba Tambah pengguna, hapus pengguna, lalu tambahkan pengguna dengan nama pengguna yang sama. Jika folder rumah pengguna berbeda untuk kedua kalinya, perintah ini memberikan folder awal yang asli dan bukan yang saat ini. Glenn jackman memberikan jawaban saat ini.
Andrew
Perhatikan juga bahwa jika Anda eval echo "~$USER"membuat asumsi yang $USERtidak mengandung karakter khusus yang dapat ditafsirkan oleh shell. Misalnya, jika USER="foo\$bar", maka ketika kita evalshell akan menggantikan $barke output Anda yang bukan yang Anda inginkan. Pada dasarnya, jika Anda mengambil rute ini, Anda perlu memastikan bahwa itu $USERadalah input yang waras. Sebagian besar waktu mungkin akan terjadi, tetapi Anda harus mengingat ini.
Zorawar
65

Ini mungkin bekerja untuk Anda:

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

Ini juga akan berfungsi pada pengguna yang bukan Anda. Misalnya,

homedir=$( getent passwd "someotheruser" | cut -d: -f6 )
glenn jackman
sumber
Ini sah, menggunakan getenvdaripada mengasumsikan lokasi passwdbahkan selangkah lebih maju daripada mengasumsikan lokasi rumah adalah/home/
Evan Carroll
13

Tampaknya Anda adalah pengguna itu - mengapa tidak

echo $HOME

?

Greenoldman
sumber
3
Ini tidak akan berfungsi jika Anda berada di lingkungan sudo'ed dan tidak lulus flag sudo -H atau -i - $ HOME akan tetap menjadi direktori home pengguna (sudo'ing) sebelumnya.
Asfand Qazi
1

Saya tidak tahu apakah itu membantu, tetapi menempatkan tilde di luar ekspresi berfungsi pada ZSH tetapi tidak pada Bash:

echo ~`echo $USER`
Pedro Penna
sumber
0

Setelah Anda masuk, jalankan cduntuk pergi ke direktori home Anda, kemudian jalankan pwduntuk mencetak direktori yang berfungsi.

Vinoth Hari
sumber
Itu tidak akan berhasil; ide di sini adalah untuk melakukan ini dalam skrip shell, dan mungkin tanpa memerlukan kredensial pengguna yang bersangkutan ...
SamB
-1 untuk alasan yang sama SamB disebutkan. Saya mengedit jawaban Anda karena saya ingin Anda melihat cara menggunakan pemformatan Markdown, dan agar lebih ringkas. Anda juga melewatkan metode yang jauh lebih mudah, yaitu adil echo $HOME.
wjandrea