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

Jawaban:


86

Anda bisa menggunakan eval:

eval echo ~$USER

Tetapi lihat komentar Andrew dan balasan glenn di bawah ini.


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 )

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

?


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`

0

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.