Saya memiliki USER
variabel dalam skrip saya, dan saya ingin melihat HOME
jalannya berdasarkan USER
variabel. Bagaimana saya bisa melakukan itu?
bash
shell-script
users
MatthewRock
sumber
sumber
~foo
dengan variabel dalambash
. Tidak secara langsung.~
tampaknya tab-berkembang, meskipun, dan perilaku lain spec'd dari tilde-prefix harus diganti dengan pathname dari direktori kerja awal yang terkait dengan nama login yang diperoleh dengan menggunakangetpwnam()
fungsi dan jadi mungkin yang lookup cukup bagus. saya tidak suka tab-ekspansi, meskipun - saya suka mengetik tab.Anda dapat menggunakan
eval
untuk mendapatkan direktori home seseorang.Setidaknya untuk pengguna lokal ini berfungsi dengan pasti. Saya tidak tahu apakah pengguna jarak jauh seperti LDAP ditangani
eval
.sumber
eval
diperlukan. Bash tidak memproses~foo
setelah ekspansi variabel.USER
.$USER
mengembang menjadi hanya satu string karakter alfabet.Tempat yang biasa adalah
/home/$USER
, tetapi itu tidak harus universal. Tempat pasti untuk mencari informasi tersebut ada di dalam file/etc/passwd
.File itu dapat dibaca dunia (siapa pun bisa membacanya), sehingga setiap pengguna memiliki akses ke isinya.
Jika $ USER ada dalam file, entri sebelum ke yang terakhir adalah direktori HOME pengguna.
Ini akan memilih entri dan mencetak direktori HOME:
Untuk sistem yang lebih kompleks (jauh), getent adalah perintah yang biasa untuk mendapatkan informasi pengguna dari sistem NSS (Name Service Switch libraries).
Perintah dari
Akan memberikan informasi yang setara (jika tersedia).
sumber
Jika pengguna tidak ada,
getent
akan mengembalikan kesalahan.Berikut ini adalah fungsi shell kecil yang tidak mengabaikan kode keluar
getent
:Berikut ini contoh penggunaan:
sumber
Jika Anda login sebagai root, jika Anda tahu
USER
kata sandi, atau jikaUSER
tidak memiliki kata sandi, berikut ini adalah pilihan lain:Di bawah
su
perilaku standar , jikaUSER
tidak terdefinisi atau kosong, makasu
akan mencoba menjalankan perintah sebagai root.Jika nilai
USER
bukan nama pengguna yang valid, maka kesalahan yang tepat akan dibangkitkan:su: user <user> does not exist
.Sudah ada banyak jawaban bagus di sini tapi ini mungkin masih bisa membantu seseorang.
sumber