【问题标题】:How to get current user name of Linux in Java如何在 Java 中获取 Linux 的当前用户名
【发布时间】:2021-06-22 08:07:59
【问题描述】:

我有一个用 Java 编写的 Selenium 测试,它作为 Jenkins 作业运行。我需要将 chmod 设置为 777,否则会引发错误。但我想正确设置 chmod 到 775 之类的东西。问题是我不知道谁是运行 Java 测试的用户。我在 Java 中有这段代码

System.out.println(Runtime.getRuntime().exec("whoami"));

返回这个:Process[pid=2116487, exitValue=0] 谁能告诉我它是什么?显然它不是我可以设置为所有者或存储库组的用户。

谢谢。

【问题讨论】:

标签: java linux jenkins


【解决方案1】:

要获取进程的输出,需要将InputStream 附加到子进程的正常输出中。然后,您可以通过创建BufferedReader 来读取它。要获取进程输出的第一行(在标准输出上),您可以使用以下代码:

Process proc = Runtime.getRuntime().exec("whoami");
BufferedReader stdin = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String username = stdin.readLine();
System.out.println(username);

如果有必要,您还可以使用proc.getErrorStream() 获取子进程(stderr)的错误输出的InputStream


但是,如果您想获取执行 VM 的用户的用户名,还有一种更好的方法:

String username = System.getProperty("user.name");
System.out.println(username);

【讨论】:

    【解决方案2】:

    您获得的不是进程“whoami”的输出,而是进程属性。试试

    System.out.println(new Printstream(Runtime.getRuntime().exec("whoami").getOutputStream()));
    

    【讨论】:

    • java.io.PrintStream
    • 顺便说一句,我的 IDE (Eclipse) 已经提出了这个命名空间。它显示了命令exec 的Javadoc,它表明函数的返回是进程属性。使用 IDE 可以避免您的问题。
    • 有时稍作休息或睡眠可以解决所有问题... ;)
    • 好的,但此命令不会写入控制台输出。
    • 谢谢,我的代码有错别字(错别字最好的地方...)
    【解决方案3】:

    你想要这个吗?

    System.getProperty("user.name")
    

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 2014-08-21
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 2011-05-15
      相关资源
      最近更新 更多