windows 节点中的'process.env.USER'和'process.env.USERNAME'有什么区别?

oewdyzsn  于 2023-01-10  发布在  Windows
关注(0)|答案(3)|浏览(166)

This is the most robust documentation I can find for the process.env property: https://nodejs.org/api/process.html#process_process_env.
在我的机器(Windows/Bash)上,当我打印process.env的内容时,我看到的是USERNAME(我的Windows用户名),而不是USER。同样,echo $USERNAME显示我的名字,但echo $USER什么也不返回。
USERUSERNAME之间有什么区别?是操作系统的问题吗?它们可以互换吗?

vngu2lb8

vngu2lb81#

您链接到的关于process.env的文档显示了一个 * 示例 * 环境; process.env基本上可以是任何值--它的值通常具有shell提供的OS默认值,但最终它们由用户和/或启动您的进程的进程控制。
即用户可以运行

$ USER=lies node script.js

...并且process.env不会包含真实的的用户名。
如果您对获取进程运行时所使用的用户的信息感兴趣,请调用os.userInfo(),它(大多数情况下1)跨平台一致。

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

1 -在Windows上,uidgidshell无用,如上所示
os.userInfo()调用uv_os_get_passwduv_os_get_passwd返回实际的当前有效用户,而不考虑环境变量中的内容。

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

jexiocij

jexiocij2#

process.env是进程的environment variables,由OS提供给进程。
这个对象实际上可以包含任何东西,如操作系统和启动它的进程所指定的,但默认情况下,Windows将用户名存储在USERNAME中,而类Unix系统(Linux、macOS等)将其存储在USER中。

ou6hu8tu

ou6hu8tu3#

我在尝试通过dotenv连接node.js和mysql时遇到了类似的问题。
网上的众多答案都没有解决我的问题。
这个方法运行得非常好,没有.env文件,但只在app.js文件中插入了身份验证所需的信息。我尝试了所有发布的答案,但都没有成功,其中包括(但不仅仅是):
1.将.env文件中的信息更改为带和不带“”
1.更改.env文件的名称
1.更改.env文件的路径
1.描述.env文件的路径
1.在app.js中编写dotenv命令的不同变体
最后,我试着用npm install dotenv命令检查我是否安装了dotenv,并且试着从console.log(dotenv.MY_ENV_VAR)中显示dotenv的版本;其再次显示未定义。
这个问题与dotenv混淆了USER(系统的,就像你一样,我使用的是Linux)和USERNAME(mysql数据库的)有关。实际上USER返回的是当前系统用户,而不是mysql数据库用户,为了方便起见,我在.env文件中将其设置为USERNAME。现在它可以连接到数据库了!
要对此进行检查,您可以用途:
第一个月
以及:
console.log(process.env.USERNAME);
第一个提供系统用户,而第二个提供数据库用户。
实际上,可以使用保存mysql数据库用户名的变量的任何名称,只要它不与Linux中系统用户名的保留名称USER匹配。

相关问题