electron 中通过子进程 echo $PATH,或者 process.env.PATH 得到的路径都是不完整的
$PATH 实际内容相如下
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/xxxx/.npm-global/lib/node_modules/http-server/bin:/Users/xxx/.npm-global/lib/node_modules/serve/bin
或者
/Users/xxxx/.nvm/versions/node/v8.11.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/mongodb/bin
但是在 electron 应用 内通过 execSync(
echo $PATH).toString()
或者 process.env.PATH
获取 就只有 /usr/bin:/bin:/usr/sbin:/sbin
这导致部分命令无法应用内执行。
有什么方法可以获取 $PATH 的完全体吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
解决了。
这个事情导致的问题是--我在应用内使用 execSync() 之类的方法执行部分命令会提示 command not found :xx,
原因目前有两个,一是 app 内获取的环境变量(process.env.PATH)和系统环境变量不一致,解决方案是在执行 execSync 这类方法时,options 设置
第二个原因是使用了 nvm 做 node 的版本管理,nvm 会更新 $PATH,可以在执行具体命令前 先如下操作:
后续:
第二个 nvm 的方式需要改成在 使用他的进程内执行
这是我本地在渲染进程中打印的
process.env.PATH.split(require('path').delimiter)