2013-03-26 1 views
0

Я получаю IOException при попытке запустить команду через патч в Java с помощью ProcessBuilder:IOException, а подножка Баш команд через 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 Но проблема не команда, я может выполнить ту же команду через терминал, и он будет удалить строку «привет мир»

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(); 
} 

что вызывает процесс, чтобы быть не в состоянии найти файл?

+0

вы можете попробовать запустить двоичный файл sed, используя полный путь. – Snicolas

ответ

3

ProcessBuilderexpects individual arguments to be sent separately в конструкторе. Попробуйте выполнить это следующим образом:

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

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

Он работает таким образом, чтобы предотвратить shell injection уязвимостей в системе безопасности.

+0

, который сделал трюк. Благодарю. – Aboutblank

Смежные вопросы