Node中的`process.env.USER`和`process.env.USERNAME`有什么区别?

Kat*_*itz 3 windows bash environment-variables node.js

这是我能找到的最健全的文档process.env:https://nodejs.org/api/process.html#process_process_env.

它提到了USER,但没有USERNAME.在我的机器上(Windows/Bash),当我打印内容时process.env,我看到USERNAME(我的Windows用户名),但没有USER.同样,echo $USERNAME显示我的名字但不echo $USER返回任何内容.

USER和之间有什么区别USERNAME?它是一个操作系统吗?它们可以互换吗?

jos*_*736 6

process.env您链接到的文档显示了一个示例环境; 它并不意味着规范. process.env基本上可以是任何东西 - 它的值通常具有由shell提供的操作系统默认值,但最终它们由用户和/或启动进程的进程控制.

即,用户可以运行

$ USER=lies node script.js
Run Code Online (Sandbox Code Playgroud)

...并且process.env不包含真实的用户名.


如果您有兴趣获取有关您的进程正在运行的用户的信息,请调用os.userInfo(),这在整个平台上(大多数是1)一致.

> os.userInfo()
{ uid: -1,
  gid: -1,
  username: 'josh',
  homedir: 'C:\\Users\\josh',
  shell: null }
Run Code Online (Sandbox Code Playgroud)

1 -在Windows上,uid,gid,和shell是无用的,因为上面看到的

os.userInfo()调用uv_os_get_passwd,返回实际当前有效用户,无论环境变量是什么.

uv_os_get_passwd获取当前有效uid(不是真实uid)的密码文件条目的子集.填充的数据包括用户名,euid,gid,shell和主目录.在非Windows系统上,所有数据都来自getpwuid_r(3).在Windows上,uid和gid设置为-1并且没有任何意义,shell为NULL.


Ale*_*ara 3

process.env是进程的环境变量,由操作系统提供给进程。

该对象实际上可以包含任何内容,如指定的操作系统和启动它的进程,但默认情况下 Windows 将用户名存储在 中,USERNAME类 Unix 系统(Linux、macOS 等)将其存储在USER.