From d94f374e304b1800b4ceafcb7e40e7553f6ebd3b Mon Sep 17 00:00:00 2001 From: achraftt Date: Sun, 14 Sep 2025 13:46:22 +0200 Subject: [PATCH 1/3] BAEL-9426: Passing Parameters to ProcessBuilder Containing Spaces in Java --- .../ProcessBuilderUnitTest.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java index d6a337bcd839..10de533f8795 100644 --- a/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java +++ b/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java @@ -8,6 +8,8 @@ import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.BufferedReader; import java.io.File; @@ -154,6 +156,23 @@ public void givenProcessBuilder_whenInheritIO_thenSuccess() throws IOException, assertEquals("No errors should be detected", 0, exitCode); } + @Test + public void givenProcessBuilder_whenPassingArgsWithSpaces_thenSuccess() + throws IOException, InterruptedException { + + ProcessBuilder processBuilder = new ProcessBuilder(getEchoCommandWithSpaces()); + Process process = processBuilder.start(); + + List results = readOutput(process.getInputStream()); + + assertFalse(results.isEmpty(), "Results should not be empty"); + assertTrue(results.stream().anyMatch(line -> line.contains("Hello World from Baeldung")), + "Results should contain greeting with spaces"); + + int exitCode = process.waitFor(); + assertEquals("No errors should be detected", 0, exitCode); + } + private List readOutput(InputStream inputStream) throws IOException { try (BufferedReader output = new BufferedReader(new InputStreamReader(inputStream))) { return output.lines() @@ -173,10 +192,16 @@ private List getEchoCommand() { return isWindows() ? Arrays.asList("cmd.exe", "/c", "echo hello") : Arrays.asList("/bin/sh", "-c", "echo hello"); } + private List getEchoCommandWithSpaces() { + return isWindows() + ? Arrays.asList("cmd.exe", "/c", "echo Hello World from Baeldung") + : Arrays.asList("/bin/sh", "-c", "echo 'Hello World from Baeldung'"); + } + private boolean isWindows() { return System.getProperty("os.name") .toLowerCase() .startsWith("windows"); } -} +} \ No newline at end of file From f139a6e057f2258f0edf4962eba1965851fede91 Mon Sep 17 00:00:00 2001 From: achraftt Date: Mon, 22 Sep 2025 23:20:52 +0200 Subject: [PATCH 2/3] BAEL-9426: Passing Parameters to ProcessBuilder Containing Spaces in Java --- .../processbuilder/ProcessBuilderUnitTest.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java index 10de533f8795..fbac74a46a77 100644 --- a/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java +++ b/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java @@ -157,20 +157,13 @@ public void givenProcessBuilder_whenInheritIO_thenSuccess() throws IOException, } @Test - public void givenProcessBuilder_whenPassingArgsWithSpaces_thenSuccess() - throws IOException, InterruptedException { - + public void givenProcessBuilder_whenPassingArgsWithSpaces_thenSuccess() throws IOException { ProcessBuilder processBuilder = new ProcessBuilder(getEchoCommandWithSpaces()); Process process = processBuilder.start(); - List results = readOutput(process.getInputStream()); assertFalse(results.isEmpty(), "Results should not be empty"); - assertTrue(results.stream().anyMatch(line -> line.contains("Hello World from Baeldung")), - "Results should contain greeting with spaces"); - - int exitCode = process.waitFor(); - assertEquals("No errors should be detected", 0, exitCode); + assertTrue(results.get(0).contains("Hello World from Baeldung")); } private List readOutput(InputStream inputStream) throws IOException { @@ -194,8 +187,8 @@ private List getEchoCommand() { private List getEchoCommandWithSpaces() { return isWindows() - ? Arrays.asList("cmd.exe", "/c", "echo Hello World from Baeldung") - : Arrays.asList("/bin/sh", "-c", "echo 'Hello World from Baeldung'"); + ? Arrays.asList("cmd.exe", "/c", "echo", "Hello World from Baeldung") + : Arrays.asList("/bin/sh", "-c", "echo", "Hello World from Baeldung"); } private boolean isWindows() { From a3800c74d356cf9ed87a0a01026baba7a7e5233b Mon Sep 17 00:00:00 2001 From: achraftt Date: Mon, 22 Sep 2025 23:36:41 +0200 Subject: [PATCH 3/3] BAEL-9426: Passing Parameters to ProcessBuilder Containing Spaces in Java --- .../baeldung/processbuilder/ProcessBuilderUnitTest.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java index fbac74a46a77..2eca98ff0fa8 100644 --- a/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java +++ b/core-java-modules/core-java-os/src/test/java/com/baeldung/processbuilder/ProcessBuilderUnitTest.java @@ -186,9 +186,11 @@ private List getEchoCommand() { } private List getEchoCommandWithSpaces() { - return isWindows() - ? Arrays.asList("cmd.exe", "/c", "echo", "Hello World from Baeldung") - : Arrays.asList("/bin/sh", "-c", "echo", "Hello World from Baeldung"); + if (isWindows()) { + return Arrays.asList("cmd.exe", "/c", "echo", "Hello World from Baeldung"); + } else { + return Arrays.asList("/bin/bash", "-c", "echo 'Hello World from Baeldung'"); + } } private boolean isWindows() {