$LOGNAME 和 logname 之间的区别

Pan*_*dya 14 environment-variables

echo $LOGNAMElogname命令正常运行时,我从它们得到相同的结果:

pandya@pandya-desktop:~$ echo $LOGNAME
pandya
pandya@pandya-desktop:~$ logname
pandya
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别吗?

Pan*_*dya 18

环境变量

$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:~$
Run Code Online (Sandbox Code Playgroud)

在这里,您可以在终端中以 root 身份登录后看到不同之处,

  • $LOGNAME给出终端中当前登录用户的名称(即root
  • logname打印登录到会话的用户的登录名(即pandya


小智 6

实用程序日志名在 16.04 中被破坏,显然是故意的,因为它可能会破解它返回的值,这可能是一个安全漏洞。 https://bugzilla.gnome.org/show_bug.cgi?id=747046 我一直在一些脚本中使用 logname,发现它很有用,因为它总是返回相同的值(我的登录名),无论我是从我自己的级别或来自 sudo 调用,而环境变量 $USER 和 $LOGNAME 没有。我并不担心有人入侵我的计算机并修改它返回的值。唉......我找到了一个解决方法。我在我的主目录中创建了一个文件

echo $USER > ~/.logname
Run Code Online (Sandbox Code Playgroud)

当我想访问我的日志名(例如,分配给 Bash 变量 g_logname)时,我这样做:

declare g_logname="$(<~/.logname)";
Run Code Online (Sandbox Code Playgroud)

这对我有用,无论是作为我自己还是通过 sudo 在根级别,它维护“〜”作为我的主目录的分配。我可以为系统上每个用户的主目录创建一个 .logname 文件。是的,有人可以入侵我的计算机并更改这些文件,但我并不担心。我只是想让我的脚本工作。