【问题标题】:What's the difference between the `USER` and `USERNAME` environment variables?`USER` 和 `USERNAME` 环境变量有什么区别?
【发布时间】:2011-05-24 20:53:28
【问题描述】:

我不完全确定要使用哪一个。

【问题讨论】:

  • 它实际上不是 Ruby 特定的。这些是任何类型的脚本或可执行文件都可以看到和使用的环境变量。
  • 我更关心操作系统的兼容性。 ENV['USER'] 会存在于 Mac 安装中吗? Linux 上的ENV['USER'] == ENV['USERNAME'] 是否安装?等等。
  • 在 Linux 上,你有LOGNAME吗?

标签: shell environment-variables


【解决方案1】:
  • 在 windows 上:ENV['username'] 将输出当前用户名。

  • 在 linux 上: 如果脚本通过 sudo 运行,"USER" 将是 sudo-ed-to 用户(通常是 root),“USERNAME”将是运行 sudo 的用户。

  • 在 Mac 上:只有 USER 存在(在 MacOS 10.15 上。要在以前的版本上确认)

这里是 XP 环境变量的列表:http://vlaurie.com/computers2/Articles/environment.htm

这里是 Vista/7 环境变量的列表,您会注意到它们略有不同:http://vlaurie.com/computers2/Articles/environment-variables-windows-vista-7.htm

编辑: 最安全的方法是编写一个小函数来确定您在哪个系统上(我从您上面的评论中收集到您想要一个只写一次,随处运行的应用程序)并根据它设置适当的值。

【讨论】:

  • 我有一个 Bash 脚本 echo $USERNAME。当我用sudo ./name.sh 运行它时,它总是打印root。所以我不确定"USERNAME" will be the user who ran sudo 的说法。你有那个来源吗?据我所知,$USER$USERNAME 是相同的,尽管在某些环境中 $USERNAME 不存在。
  • 如果你运行sudo bash,然后在那个shell中运行printenv你会得到USER=rootSUDO_USER=<original user's name>USERNAME=root。这是在 Ubuntu 16.04.4 上。
【解决方案2】:

如果是 Ruby 1.8.6 或 1.9.2,则只有 ENV['USER'](在 Mac 上):

ruby-1.9.2-p0 > ENV.keys.grep /user/i
 => ["USER", "__CF_USER_TEXT_ENCODING"] 

【讨论】:

  • 看,我在 Win 7 上使用 Ruby 1.9.2,我同时拥有 ENV["USER"]ENV["USERNAME"]
猜你喜欢
  • 2017-01-19
  • 2011-02-21
  • 1970-01-01
  • 2015-01-10
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2012-05-21
相关资源
最近更新 更多