Jawaban:
Dari variabel Lingkungan ,
$LOGNAME
sama seperti $USER
yang memberi
Nama pengguna yang saat ini masuk. Variabel ini diatur oleh sistem. Anda mungkin tidak boleh mengubah nilainya secara manual.
Dari man logname
logname - cetak nama login pengguna
Dihabiskan berbeda dengan contoh berikut:
pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$
Di sini Anda dapat melihat perbedaan setelah login sebagai root di terminal,
$LOGNAME
memberikan nama pengguna yang saat ini masuk di terminal (yaitu root
)logname
cetak nama login pengguna yang masuk sesi (yaitu pandya
)Logname utilitas rusak di 16.04, tampaknya sengaja karena mungkin untuk meretas nilai yang dikembalikan, yang bisa menjadi cacat keamanan. https://bugzilla.gnome.org/show_bug.cgi?id=747046 Saya telah menggunakan logname di beberapa skrip, dan menganggapnya berguna karena selalu mengembalikan nilai yang sama (nama login saya) apakah saya menelepon dari dari tingkat saya sendiri atau dari doa sudo, sedangkan variabel lingkungan $ USER dan $ LOGNAME tidak. Saya tidak khawatir tentang seseorang yang meretas komputer saya dan memodifikasi nilai yang dihasilkannya. Sial .... Saya telah menemukan solusi. Saya membuat file di direktori home saya
echo $USER > ~/.logname
Ketika saya ingin mengakses logname saya (mis., Menetapkan ke variabel Bash g_logname), saya melakukannya dengan demikian:
declare g_logname="$(<~/.logname)";
Ini berfungsi untuk saya, baik sebagai saya sendiri atau di tingkat root melalui sudo, yang mempertahankan penugasan "~" sebagai direktori home saya. Saya bisa membuat file .logname untuk direktori home masing-masing pengguna di sistem. Ya, seseorang dapat meretas komputer saya dan mengubah file-file ini, tetapi saya tidak terlalu khawatir tentang itu. Saya hanya ingin skrip saya berfungsi.