Java ProcessBuilder sudo bash命令的正确命令格式是什么?

时间:2014-02-17 03:45:00

标签: java bash sudo

如何从Java ProcessBuilder执行这样的命令(使用sudo)? (我不需要包含密码,因为普通用户有权以root身份运行myscript.log而无需密码。)

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

我的问题是这个命令的元素如何传递到Java ProcessBuilder的构造函数中?

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

1 个答案:

答案 0 :(得分:4)

这里的问题是重定向不会在你正在调用的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密码时,您可能仍会遇到问题。