2014-02-17 145 views
3

如何从Java ProcessBuilder执行像这样的命令(使用sudo)? (我并不需要包括密码,因为普通用户以root身份运行myscript.log没有密码的许可。)Java ProcessBuilder sudo bash命令的正确命令格式是什么?

sudo bash /home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1 

我的问题是怎么做这个命令的元素,会传递到的构造Java的ProcessBuilder

例如,“sudo”是 ctor的最后一个参数,还是其他地方的第一个参数?你怎么知道他们去哪里以及命令的哪些元素成为ProcessBuilder的参数?

回答

3

这里的问题是重定向不会在您调用的bash命令中执行。

尝试使用传递命令来执行作为字符串全光照对于bash -c选项:

sudo bash -c "/home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1" 

为了使用java的ProcessBuilder使用此命令我会尝试构建这样的:

new ProcessBuilder("sudo", "bash", "-c", "/home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1"); 

通过使用ProcessBuilder,您基本上会要求它执行sudo命令并向其提供3个参数。作为回报,sudo会像这样调用你的命令:bash -c "..."

当进程提示输入sudo密码时,您可能仍会遇到问题。