为什么 运行 `which` 在节点子进程中会导致不同的结果?

why does running `which` in a node child process result in different results?

当 运行 终端中的 which 命令(例如,which yarn)时,我得到的结果与 运行 节点脚本时的结果不同(来自同一位置)调用 execSync('which yarn')

有人可以解释为什么吗?

tldr;

// in terminal
which yarn
// results in 
/Users/xxx/.nvm/versions/node/v17.1.0/bin/yarn

// in node
execSync('which yarn')
// results in
/var/folders/0j/xxx/T/yarn--xxx/yarn

看起来 Node.js 进程是 运行 作为不同的用户(而不是你),并且该用户与你的帐户有不同的路径(或者至少不是运行 任何 .bashrc 或可能添加到路径中的特定于您的用户帐户的类似内容)。这是有道理的,因为您的结果指的是您的特定文件夹 (/Users/xxx/),但来自 Node.js 的结果指的是所有用户共享的中心位置。