gpt4 book ai didi

java - Linux 命令 "logname"在 Java 中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:55 25 4
gpt4 key购买 nike

我正在使用 Ubuntu 14.04,我尝试以 sudo 用户身份从 java 执行 logname 命令,但它返回 null。我试过的代码如下:

try {            
Process p = Runtime.getRuntime().exec("logname");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String sa = br.readLine();
System.out.println("Logged User: "+sa);
} catch (IOException ex) {
System.out.println(ex);
}

我得到的输出是

Logged User: null

我也试过

String[] temp = {"/bin/sh","-c","logname"} exec(temp);

String[] temp = {"/bin/sh","-c","sudo logname"} exec(temp);

exec("sudo logname");

更新 1:

我试过 whoami|awk '{print $1}' 来查找日志名。但这没有用。如果我以 root 身份登录,它会显示 root。

最佳答案

您是否尝试过使用您尝试执行的应用程序的完整路径?

/usr/bin/logname

/usr/bin/whoami

关于使用:

"echo $SUDO_USER"

这似乎有效:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class runlogname {

public static void main(String[] args)
{
try
{
ProcessBuilder pb = new ProcessBuilder();
pb.command("/bin/bash", "-c", "/usr/bin/logname").start();
Process p = pb.start();
int retValue = p.waitFor();
System.out.println("retValue = " + Integer.toString(retValue));

BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer output = new StringBuffer();
String line = "";
while ((line = br.readLine())!= null) {
output.append(line + "\n");
}

String sa = output.toString();
System.out.println("Logged User: "+sa);
}
catch (IOException ex)
{
System.out.println(ex);
}
catch (InterruptedException ex)
{
System.out.println(ex);
}
}
}

但是 logname 命令返回返回代码 1,根据手册页指示错误。所以这意味着 java 代码是正确的,但 logname 命令不起作用。

运行我提供的示例的 strace(使用 -f 标志)将告诉您它失败的原因。

在我的盒子上是:

[pid 29925] write(2, "/usr/bin/logname: ", 18) = 18
[pid 29925] write(2, "no login name", 13) = 13
[pid 29925] write(2, "\n", 1) = 1

关于java - Linux 命令 "logname"在 Java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23675780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com