0

ProcessBuilderを使用してJavaを介してsedコマンドを実行しようとすると、IOExceptionが発生します。

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 、問題はコマンドではありません。ターミナルから同じコマンドを実行すると、文字列「helloworld」が削除されます。

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

プロセスがファイルを見つけられない原因は何ですか?

4

1 に答える 1

4

ProcessBuilder 個々の引数がコンストラクターで個別に送信されることを想定しています。次のように実行してみてください。

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

(必要に応じて渡すこともできList<String>ます)

このように機能して、シェルインジェクションのセキュリティの脆弱性を防ぎます。

于 2013-03-26T20:57:55.327 に答える