IOException при выполнении команд bash через ProcessBuilder

Я получаю исключение IOException при попытке запустить команду sed через Java с помощью ProcessBuilder:

ERROR: java.io.IOException: Cannot run program "sed -i 's/hello world//g' 
/home/user/test": error=2, No such file or directory

Команда sed -i 's/hello world//g' /home/user/test Но проблема не в команде, я могу запустить ту же команду через терминал, и она удалит строку «hello world».

public void removeString(String str, String file) throws IOException {
    String command = "sed -i \'s/" + str + "//g\' " + file;
    System.out.println(command);
    ProcessBuilder pb = new ProcessBuilder(command);
    Process p = pb.start();
}

Из-за чего процесс не может найти файл?


person Aboutblank    schedule 26.03.2013    source источник
comment
вы можете попробовать запустить двоичный файл sed, используя его полный путь.   -  person Snicolas    schedule 27.03.2013


Ответы (1)


ProcessBuilder ожидает, что отдельные аргументы будут отправлены отдельно в конструкторе. Попробуйте запустить так:

ProcessBuilder pb = new ProcessBuilder("sed", "-i", "s/hello world//g", "/home/user/test");

(Вы также можете передать ему List<String>, если хотите)

Это работает таким образом, чтобы предотвратить внедрение оболочки в систему безопасности.

person Brendan Long    schedule 26.03.2013