Java Runtime.getRuntime.exec(“我是谁”)未给出所需结果

Java Runtime.getRuntime.exec(“我是谁”)未给出所需结果,java,shell,unix,Java,Shell,Unix,我需要从java代码中找到登录的用户,因此我使用以下选项: Runtime.getRuntime.execwho Runtime.getRuntime.exec我是谁 两者都给出了相同的结果,即我在提示符下发出who命令时得到的结果。 我猜它在空间之后什么也认不出来。我也尝试了其他命令,但结果相同 代码有问题吗?或者我需要设置一些环境,请参见“帮助”。Runtime.exec函数的第一个参数仅采用程序名 为了传递参数,您需要使用不同的版本,例如Runtime.execString[]cmdarr

我需要从java代码中找到登录的用户,因此我使用以下选项: Runtime.getRuntime.execwho Runtime.getRuntime.exec我是谁

两者都给出了相同的结果,即我在提示符下发出who命令时得到的结果。 我猜它在空间之后什么也认不出来。我也尝试了其他命令,但结果相同


代码有问题吗?或者我需要设置一些环境,请参见“帮助”。

Runtime.exec函数的第一个参数仅采用程序名

为了传递参数,您需要使用不同的版本,例如Runtime.execString[]cmdarray。例如:

Runtime.getRuntime().exec(new String[] {"who", "am", "i"} );
或者,更容易:

Runtime.getRuntime().exec("who am i".split());

它使用String.split方法在空格上拆分。

Runtime.exec函数的第一个参数仅采用程序名

为了传递参数,您需要使用不同的版本,例如Runtime.execString[]cmdarray。例如:

Runtime.getRuntime().exec(new String[] {"who", "am", "i"} );
或者,更容易:

Runtime.getRuntime().exec("who am i".split());

它使用String.split方法在空格上进行拆分。

如果您只需要知道当前登录用户的姓名,而不需要知道who命令的其他信息,如pty名称等,则应使用

System.getProperty("user.name"); 

通过这种方式,您可以保持平台独立性,区域独立性如果您不使用C语言环境,则“我是谁”的输出格式可能会有所不同,而且它比调用外部命令更健壮。

如果您只需要知道当前登录用户的名称,您不应该使用who命令的任何其他信息,如pty名称等

System.getProperty("user.name"); 

通过这种方式,您可以保持独立于平台、独立于区域设置如果您不使用C区域设置,则“我是谁”的输出格式可能会有所不同,而且它比调用外部命令更健壮。

请参阅命令whoami可能更有用。它只给你用户名。此外,大多数shell定义一个名为USER的环境变量。它可以通过System.getPropertyuser.name访问。另外,这种方法返回java进程的所有者。如果您正在编写一个用户必须登录的应用程序,并且希望获得该用户id,那么这并不能满足您的需要。请参阅命令whoami可能更有用。它只给你用户名。此外,大多数shell定义一个名为USER的环境变量。它可以通过System.getPropertyuser.name访问。另外,这种方法返回java进程的所有者。如果您正在编写一个用户必须登录的应用程序,并且您希望获得该用户id,那么这并不能满足您的需要。从中,更准确地说,命令字符串使用由call new StringTokenizercommand创建的StringTokenizer分解为标记,而无需进一步修改字符类别。然后,标记器生成的标记按相同顺序放置在新的字符串数组cmdarray中。另外,getRuntime是一种方法。在二读时,我错了。从中,更准确地说,命令字符串使用由call new StringTokenizercommand创建的StringTokenizer分解为标记,而无需进一步修改字符类别。然后,标记器生成的标记按相同顺序放置在新的字符串数组cmdarray中。此外,getRuntime是一种方法。