Saya menulis sebuah program di Bash yang perlu mendapatkan nama pengguna pengguna.
Saya pernah mendengar tentang sesuatu yang disebut whoami
, tetapi saya tidak tahu apa fungsinya atau bagaimana menggunakannya.
Perintah apa yang saya gunakan untuk mendapatkan nama pengguna saat ini?
man whoami
biasanya merupakan perhentian pertama yang baik untuk memeriksa dokumentasi.Jawaban:
Di baris perintah, masukkan
atau
Untuk menyimpan nilai-nilai ini ke variabel, lakukan
atau
Tentu saja, Anda tidak perlu membuat variabel karena untuk itulah
$USER
variabel itu.sumber
$USER
tidak disetel sama sekali. Lebih buruk lagi, ini hanya variabel lingkungan, sehingga dapat ditimpa oleh pengguna:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
whoami
(seperti yang Anda sarankan) menghilangkan masalah itu sama sekali, dengan asumsi variabel lingkungan yang diganti adalah masalah potensial dalam konteks Anda.Alternatif untuk
whoami
adalahid -u -n
.id -u
akan mengembalikan id pengguna (mis. 0 untuk root ).sumber
id
perintah dan-u
dan-n
bendera adalah bagian dari POSIX"${USER}"
danwhoami
keduanya tergantung pada bagaimana Anda login. Secara khusus, shell login dan sudo akan menetapkan $ USER, danwhoami
melihat pengguna yang dilampirkan ke stdin. Namun, jika Anda menjalankan pekerjaan batch dari cron, atau Anda menjalankan skrip startup sebagai pengguna yang berbeda dari root, maka ini akan menampilkan pengguna yang salah (root) atau tidak sama sekali. Jawaban ini akan mengembalikan nilai yang benar terlepas dengan melihat ID pengguna proses.-n
argumen tersebut mencetak nama pengguna, seperti pertanyaan awal yang diajukan. lihat yang berikut:id -u -n
cetakanbrett
- bahkan pada darwin.Gunakan perintah Unix / Linux / BSD / MacOS standar
logname
untuk mengambil pengguna yang login. Ini mengabaikan lingkungan dan juga sudo, karena ini adalah reporter yang tidak dapat diandalkan. Itu akan selalu mencetak nama pengguna yang masuk dan kemudian keluar. Perintah ini sudah ada sejak sekitar 1981.sumber
Retas yang saya gunakan pada Solaris 9 dan Linux dan yang berfungsi dengan baik untuk keduanya:
Cuplikan ini mencetak nama pengguna dengan EUID saat ini.
CATATAN: Anda perlu Bash sebagai penerjemah di sini.
Pada Solaris Anda memiliki masalah dengan metode, dijelaskan di atas:
id
tidak menerima-u
dan-n
parameter (jadi Anda harus mengurai output)whoami
tidak ada (secara default)who am I
mencetak pemilik terminal saat ini (mengabaikan EUID)$USER
variabel diatur dengan benar hanya setelah membaca file profil (misalnya,/etc/profile
)sumber
ps
perintah Anda adalah segalanya yang diperlukan untuk menampilkan pemilik pid shell saat ini.command -p id
(dari shell POSIX) atau/usr/xpg4/bin/id
. Secara lebih umum, pada Solaris, Anda ingin memodifikasi lingkungan Anda untuk menempatkan diri Anda dalam lingkungan POSIX (dengan sesuatu sepertiPATH=
getconf PATH` dan pastikan untuk menjalankan/usr/xpg4/bin/sh
) untuk menghindari terjebak dengan perintah dari 70-an / 80-an.Dua perintah:
id
mencetak id pengguna bersama dengan grup. Format:uid=usernumber(username) ...
whoami
memberikan nama pengguna saat inisumber
Ketika izin root (sudo) diperlukan, yang biasanya 90% + saat menggunakan skrip, metode dalam jawaban sebelumnya selalu memberikan Anda
root
sebagai jawabannya.Untuk mendapatkan pengguna "login" saat ini sama mudahnya, tetapi ia perlu mengakses variabel yang berbeda:
$SUDO_UID
dan$SUDO_USER
.Mereka dapat digaungkan:
Atau ditugaskan, misalnya:
sumber
Di Solaris OS saya menggunakan perintah ini:
Di Linux- Seseorang sudah menjawab ini dalam komentar.
sumber
Untuk Bash , KornShell (
ksh
)sh
,, dll. Banyak pertanyaan Anda dengan cepat dijawab oleh:untuk mendapatkan dokumentasi untuk sistem yang Anda gunakan atau biasanya lebih nyaman:
google "fungsi manusia"
Ini mungkin memberikan hasil yang berbeda untuk beberapa hal di mana Linux dan Unix memiliki perbedaan sederhana.
Untuk pertanyaan ini, cukup masukkan "whoami" di shell Anda.
Untuk skrip itu:
sumber
Nama pengguna pengguna saat ini dapat diperoleh dalam Bash murni dengan
${parameter@operator}
ekspansi parameter (diperkenalkan dalam Bash 4.4):The
:
built-in (sinonim daritrue
) digunakan sebagai pengganti variabel sementara dengan menetapkan argumen terakhir, yang disimpan dalam$_
. Kami kemudian mengembangkannya (\u
) seolah-olah itu adalah string cepat denganP
operator.Ini lebih baik daripada menggunakan
$USER
, karena$USER
hanya variabel lingkungan biasa; itu dapat dimodifikasi, tidak disetel, dll. Bahkan jika itu tidak sengaja dirusak, kasus umum di mana itu masih salah adalah ketika pengguna diaktifkan tanpa memulai shell login (su
default).sumber
Pada kebanyakan sistem Linux, cukup mengetik whoami pada baris perintah memberikan ID pengguna.
Namun, pada Solaris, Anda mungkin harus menentukan ID pengguna, dengan menentukan UID pengguna yang masuk melalui perintah di bawah ini.
Setelah UID diketahui, cari pengguna dengan mencocokkan UID dengan
/etc/passwd
file.sumber
Dapatkan user_struct tugas saat ini
sumber