Answers:
根据环境变量,
$LOGNAME
与$USER
给出的相同
当前登录用户的名称。该变量由系统设置。您可能不应该手动更改其值。
从 man logname
日志名-打印用户的登录名
Expained 不同地使用由下面的例子:
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
)实用程序日志名称在16.04中被破坏,显然是故意的,因为有可能破解它返回的值,这可能是一个安全漏洞。 https://bugzilla.gnome.org/show_bug.cgi?id=747046 我一直在某些脚本中使用登录名,并且发现它很有用,因为无论我是从a调用它始终返回相同的值(我的登录名)我自己的级别或通过sudo调用,而环境变量$ USER和$ LOGNAME则没有。我并不担心有人侵入我的计算机并修改它返回的值。......。我找到了解决方法。我在主目录中这样创建了一个文件
echo $USER > ~/.logname
当我想访问我的日志名(例如,分配给Bash变量g_logname)时,我这样做是:
declare g_logname="$(<~/.logname)";
无论是我本人还是通过sudo在根级别上运行,这对我都有效,该目录将“〜”分配为我的主目录。我可以为系统上每个用户的主目录创建一个.logname文件。是的,有人可以入侵我的计算机并更改这些文件,但是我并不为此担心。我只希望我的脚本能工作。