我正在尝试从 Java 查找当前登录的用户名。
Process p;
try
{
p = Runtime.getRuntime().exec("who -m");
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null)
System.out.println(line);
}
catch (Exception e)
{
}
上面的代码没有打印任何结果。但是,如果我删除 -m 选项,它会打印用户名和其他详细信息。我还测试了其他选项,如 -s、-u。除了 -m 之外,一切都有效。有谁知道为什么会这样吗?
注意: 我知道
System.getProperty("user.name");
但这对我来说不是一个解决方案。我正在调用一个使用“who -m”的 shell 脚本。所以,我不能使用java类。
最佳答案
您所看到的原因是 Java 进程启动器不保证关联的 TTY 的存在。在实际命令行上考虑这个示例:
$ who -m
user pts/8 2014-09-02 02:24
$ who -m </dev/null
$
由于标准输入未与第二个 who
调用的终端关联,因此 who
无法确定关联的用户。有趣的是,将 stdin
重定向到 /dev/tty
似乎也不起作用:
$ who -m </dev/tty
$
老实说,除非确定与 stdin
关联的用户正是您所追求的,否则您应该更新脚本以使用主机名
以及例如id -un
或 shell 解释器可能提供的任何其他方式来确定当前用户。
对于那些对细节感兴趣的人,我对 another answer of mine 进行了更多挖掘。 .
关于java - 从 Java 运行 "who -m"命令会产生空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26123706/