如何从Java ProcessBuilder执行这样的命令(使用sudo)?(我不需要包含密码,因为普通用户有权运行 myscript.log作为没有密码的 root。
sudo bash /home/me/path/myscript.sh arg1 arg2 arg3 >> /var/log/path/myscript.log 2>&1
我的问题是这个命令的元素如何传递到 Java ProcessBuilder
的构造函数中?
例如,"sudo"是 ProcessBuilder
ctor 的第一个参数、最后一个参数还是其他地方?你怎么知道他们去哪里以及命令的哪些元素成为ProcessBuilder
的参数?
这里的问题是重定向不会在您调用的 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 密码时,您可能仍然有问题。