如何在Grails中查找任意用户的主目录?在Linux中,通常为/home/user。但是,在一些操作系统中,例如OpenSolaris,路径为/export/home/user。
注:该段英文内容询问如何在Grails中查找任意用户的主目录路径,同时提到了在不同操作系统下该路径可能存在的不同。如何在Grails中查找任意用户的主目录?在Linux中,通常为/home/user。但是,在一些操作系统中,例如OpenSolaris,路径为/export/home/user。
注:该段英文内容询问如何在Grails中查找任意用户的主目录路径,同时提到了在不同操作系统下该路径可能存在的不同。通常情况下,您可以使用该语句
String userHome = System.getProperty( "user.home" );
获取任何平台上用户的主目录。有关可以获取的其他内容,请参阅getProperty方法文档。
你可能会遇到某些访问问题,通过使用此解决方法(使用安全策略文件)可以避免这些问题。
对于类Unix系统,您可能希望使用Shell执行 "echo ~username
" (因此使用Runtime.exec()
运行{"/bin/sh", "-c", "echo ~username"}
)。
/bin/sh
必须是 Bourne 兼容的 shell,但波浪线扩展(~
和 ~user
)不是此类 shell 的必需功能之一。Linux 发行版将 BASH 用作 /bin/sh
,因此波浪线扩展可以正常工作。如果你在其他某些 UNIX 操作系统中使用 /bin/sh
运行 echo ~
,可能会返回波浪线(例如 "~"
),而不是主目录路径。 - Santeri Paavolainen在Java中试试这个:
System.out.println("OS: " + System.getProperty("os.name") + ", USER DIRECTORY: " + System.getProperty("user.home"));
对于任意用户,作为Web服务器:
private String getUserHome(String userName) throws IOException{
return new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(new String[]{"sh", "-c", "echo ~" + userName}).getInputStream())).readLine();
}
我猜您想找到另一个用户的主目录。显然,获取“user.home”属性是获取当前用户主目录的最简单方法。
要获取任意用户的主目录,需要在命令行中稍微用点技巧:
String[] command = {"/bin/sh", "-c", "echo ~root"}; //substitute desired username
Process outsideProcess = rt.exec(command);
outsideProcess.waitFor();
String tempResult;
StringBuilder sb = new StringBuilder();
while((tempResult = br.readLine()) != null) sb.append(tempResult);
br.close();
return sb.toString().trim();
echo ~rbronosky
将告诉您到我的主目录的路径 /home/rbronosky
,但是如果 rbronosky 存储在变量中呢?如果您执行 name=rbronosky; echo ~$name
,则会得到 ~rbronosky
。~/.ssh
,否则它将扩展为 /root/.ssh
。相反,您可以执行以下操作:# Up near the top of your script add
export HOME=$(bash <<< "echo ~${SUDO_USER:-}")
# Then you can use $HOME like you would expect
cat rsa_key.pub >> $HOME/.ssh/authorized_keys
这个脚本的美妙之处在于,如果不以sudo身份运行,则$SUDO_USER为空,因此基本上与执行“echo~”相同。它仍然像你期望的那样工作。
如果您使用set -o nounset
,并且您应该使用,则变量引用${SUDO_USER:-}
将默认为空,而$SUDO_USER
或${SUDO_USER}
会报错(因为未设置),如果没有通过sudo
运行。
export HOME=$(echo "echo ~$SUDO_USER" | bash)
“echo echo?什么?” - Bruno Bronosky$HOME
来实现此目的。$HOME
根据登录的用户而变化。我不明白它如何用于查找 任意 用户的主目录。 - Sebastian SimongetpwXXX()
调用系列。eval echo ~$SUDO_USER
这可能有效。
在类UNIX系统中查找用户FOO的主目录,请使用~FOO
。对于当前用户,请使用~
。