sudo命令使用java无法正常工作

时间:2013-08-14 09:33:42

标签: java linux sudo

我有这个代码在使用和不使用sudo选项

的情况下执行命令
String sudoScript = "sudo -u root -S ls /";
String script = "ls /";
try {
    System.out.println("===================================");
    System.out.println("command="+sudoScript);
    Process p1 = Runtime.getRuntime().exec(sudoScript);
            System.out.println("p2.waitFor()="+p1.waitFor());
    BufferedReader stdInput1 = new BufferedReader(new InputStreamReader(p1.getInputStream()));
    while ((sudoScript = stdInput1.readLine()) != null) {
            System.out.println(script);
    }
    System.out.println("===================================");
    System.out.println("command="+script);
    Process p2 = Runtime.getRuntime().exec(script);
            System.out.println("p2.waitFor()="+p2.waitFor());
    BufferedReader stdInput2 = new BufferedReader(new InputStreamReader(p2.getInputStream()));
    while ((script = stdInput2.readLine()) != null) {
            System.out.println(script);
    }
} catch (Exception e) {
    e.printStackTrace();
}

这就是我得到的那种输出 -

===================================
command=sudo -u root -S ls /
p2.waitFor()=1
===================================
command=ls /
p2.waitFor()=0
bin
boot
cgroup
data
dev
etc
home
home.save
lib
lost+found
media
mnt
null
opt
opt.save
proc
root
sbin
selinux
srv
sys
tmp
usr
var

如果你观察到,我无法使用sudo命令获得相同的输出。我有什么想念的吗?

3 个答案:

答案 0 :(得分:1)

现在大多数发行版都配置了sudo,要求tty执行。

尝试(在/ etc / sudoers中):

Defaults    requiretty

Defaults!/path/to/program !requiretty

您需要确保sudo不需要该特定命令的该用户的密码(例如ls /),或者您需要将其提供给sudo

更新:顺便说一下,读取stderr也是一个好主意,所以我们不必猜测命令执行有什么问题

答案 1 :(得分:0)

你应该能够输入sudo命令的密码。

答案 2 :(得分:0)

命令sudo -u root -S ls /会提示输入用户密码。

echo '[password]' | sudo -u root -S ls /之类的东西可能会成功。

注意: 这需要对密码进行硬编码。这可能不是最好的主意。

编辑: 根据{{​​1}},man sudo选项是不必要的。运行-u root将产生相同的效果。