问题描述
我目前正在构建一个电子应用程序,并使用电子构建器构建安装程序,例如 .deb
和 .snap
。在应用程序内部,由于某种原因,我需要访问用户主目录,我正在使用 process.env.HOME || process.env.USERPROFILE
来获取主目录(app.getPath('home')
也返回相同的内容)。这适用于其他情况,但当应用程序与 .snap
一起安装时,而不是实际的主 (/home/username
) 目录返回 ~/snap/<app_name>/3/
作为主目录。 (3
是快照修订号)
如何在所有情况下获取实际的主目录 (/home/username
)?
解决方法
注意 ~/
不是有效路径;它被 shell 扩展为 $HOME
。在大多数情况下,您要查找的实际路径为 /home/username
。一个简单的解决方案是简单地假设它是主目录。
为了防止主文件夹不在此位置的情况,我们应该询问操作系统:
操作系统模块
const os = require("os");
const user_name = os.userInfo().username;
const user_dir = os.userInfo().homedir;
console.log(user_name,user_dir);
来自NodeJS docs:
os.userInfo()返回的homedir的值由操作系统提供。这与 os.homedir() 的结果不同,后者在回退到操作系统响应之前查询主目录的环境变量。
posix 模块
(原始答案)如果由于某种原因上述方法不起作用,您可以明确使用 getpwnam
从 /etc/passwd
中查找实际主目录:
const posix = require("posix");
const os = require("os");
const user_name = os.userInfo().username;
const user_dir = posix.getpwnam(user_name).dir;
console.log(user_name,user_dir);
您需要先安装 posix
模块:
npm install posix