Метод exec() Runtime не перенаправляет вывод

Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt");

Я запускаю эту команду с помощью Java. Выполняется script, но он не перенаправляет поток в файл. Кроме того, файл out.txt не создается.

Этот script работает нормально, если я запускаю его в оболочке.

Любые идеи?

Ответы

Ответ 1

Вам нужно использовать ProcessBuilder для перенаправления.

ProcessBuilder builder = new ProcessBuilder("sh", "somescript.sh");
builder.redirectOutput(new File("out.txt"));
builder.redirectError(new File("out.txt"));
Process p = builder.start(); // may throw IOException

Ответ 2

Когда вы запускаете команду, запуск оболочки отсутствует, и никакие команды или функции оболочки недоступны. Чтобы использовать что-то вроде &>, вам нужна оболочка. У вас есть один, но вы не передаете его ему. попробуйте вместо этого.

Runtime.getRuntime().exec(new String[] { "sh", "somescript.sh &> out.txt" });