Я пытаюсь запустить bash из Java в Windows (здесь с подсистемой Windows Linux, но Git Bash - то же самое), но даже основы не работают:
bash --noprofile --norc -c 'echo $PWD'`
В cmd.exe
это прекрасно работает:
В Java:
import static java.util.stream.Collectors.joining;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UncheckedIOException;
import java.util.ArrayList;
import java.util.List;
public class ProcessBuilderTest {
public static int runBatch() {
List<String> commandLine = new ArrayList<>();
// both following lines have the same result
commandLine.add("bash");
// commandLine.add("C:\\Windows\\System32\\bash.exe");
commandLine.add("--noprofile");
commandLine.add("--norc");
commandLine.add("-c");
commandLine.add("'echo $PWD'");
System.out.println("cmd: " + commandLine.stream().collect(joining(" ")));
try {
ProcessBuilder processBuilder = new ProcessBuilder(commandLine);
Process process = processBuilder
.redirectErrorStream(true)
.start();
new BufferedReader(new InputStreamReader(process.getInputStream())).lines()
.forEach(System.out::println);
return process.waitFor();
} catch (IOException e) {
throw new UncheckedIOException(e);
} catch (InterruptedException e) { // NOSONAR
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
runBatch();
}
}
Выполнение вышеуказанного приводит к следующему, и процесс никогда не завершается.
cmd: bash --noprofile --norc -c 'echo $PWD'
/bin/bash: echo /mnt/c/scratch/pbtest: No such file or directory
Ожидаемое поведение: ошибка отсутствует, и процесс завершается.