Есть несколько проблем с вашим кодом.
Конструктор ProcessBuilder
принимает список аргументов следующим образом:
Process p = new ProcessBuilder("myCommand", "myArg").start();
см. ProcessBuilder Javadoc . В вашем случае sudo
- это команда, а остальные - аргументы. Если у вас есть хотя бы Java 7, вы можете перенаправить вывод команды, используя метод inheritIO.
ProcessBuilder probuilder = new ProcessBuilder().inheritIO().command("myCommand", "myArg");
Проверьте это для подробного обсуждения.
Во-вторых, вы должны указать полный путь к исполняемому файлу (т.е. /usr/bin/sudo
вместо sudo
), иначе он не сможет его найти.
Быстрое исправление вашего кода должно выглядеть следующим образом:
String[] command = { "/usr/bin/sudo iptables -t nat -I PREROUTING 1 -s " + ipAddress
+ " -p tcp -m tcp --dport 80 -j ACCEPT " };
String[] commands = command[0].split(" ");
ProcessBuilder probuilder = new ProcessBuilder(commands);
Подобный вопрос здесь .
Надеюсь, это поможет.