当echo $LOGNAME
和logname
命令正常运行时,我从它们获得相同的结果:
pandya@pandya-desktop:~$ echo $LOGNAME
pandya
pandya@pandya-desktop:~$ logname
pandya
它们之间有什么区别吗?
答案1
从环境变量:
$LOGNAME
$USER
和给出的相同
当前登录用户的名称。此变量由系统设置。您可能不应该手动更改其值。
从man logname
:
logname-打印用户的登录名
解释不同用途通过以下示例:
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:~$
您可以在终端中以 root 身份登录后看到以下区别,
$LOGNAME
给出当前终端中登录的用户(即root
)- 而
logname
打印用户的登录名登录到会话(即pandya
)
答案2
实用程序日志名在 16.04 中被破坏,显然是故意的,因为有可能破解其返回的值,这可能是一个安全漏洞。 https://bugzilla.gnome.org/show_bug.cgi?id=747046 我在一些脚本中使用过 logname,发现它很有用,因为无论我是从我自己的级别还是从 sudo 调用它,它总是返回相同的值(我的登录名),而环境变量 $USER 和 $LOGNAME 则不是。我并不担心有人入侵我的电脑并修改它返回的值。唉……我找到了一个解决方法。我在我的主目录中创建了一个文件
echo $USER > ~/.logname
当我想访问我的日志名(例如,分配给 Bash 变量 g_logname)时,我会这样做:
declare g_logname="$(<~/.logname)";
对我来说,这很有效,无论是以我自己的身份还是通过 sudo 在 root 级别执行,这都会保留“~”作为我的主目录的分配。我可以为系统上每个用户的主目录创建一个 .logname 文件。是的,有人可能会入侵我的计算机并更改这些文件,但我并不担心这一点。我只希望我的脚本能够正常工作。