[ https://issues.apache.org/jira/browse/EXEC-54?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13245102#comment-13245102 ]
Sebb commented on EXEC-54: -------------------------- Note that the quoting / escaping requirements vary by OS. AFAIK, not all OSes support escapes, and the mechanism may vary depending on the shell that is used. > Problem with argument containing spaces > --------------------------------------- > > Key: EXEC-54 > URL: https://issues.apache.org/jira/browse/EXEC-54 > Project: Commons Exec > Issue Type: Bug > Affects Versions: 1.1 > Environment: Mac OsX 10.6.6, JVM 1.6.0 > Reporter: Jeremias Rößler > Assignee: Siegfried Goeschl > Labels: arguments, quotes, spaces > > I am new to Commons Exec, so this could also be an error in usage, but... > When I use the {{CommandLine}} class to add a argument that contains spaces, > some quotes are added and are then part of the argument that is given. > For example: When I call {{java "what version"}} I get > {{java.lang.NoClassDefFoundError: what version}}, and when I call {{java > "\"what version\""}} (which contains escaped quotes, that are part of the > command line argument itself), I get {{java.lang.NoClassDefFoundError: "what > version"}}. > So the following test fails, because as you can see in the last line, Apache > Exec is producing the latter version where it should have produced the first > version: > {code:java} > @Test > public void testArgumentQuoting() throws Exception { > String argument = "what version"; > DefaultExecutor executor = new DefaultExecutor(); > DefaultExecuteResultHandler resultHandler = new > DefaultExecuteResultHandler(); > ByteArrayOutputStream out = new ByteArrayOutputStream(); > PumpStreamHandler streamHandler = new PumpStreamHandler(out, > out); > executor.setStreamHandler(streamHandler); > CommandLine cmdLine = new CommandLine("java"); > cmdLine.addArgument(argument); > executor.execute(cmdLine, resultHandler); > resultHandler.waitFor(); > String resultPattern = "Exception in thread \"main\" > java\\.lang\\.NoClassDefFoundError: ([\\w \"]+)"; > Pattern pattern = Pattern.compile(resultPattern); > Matcher matcher = pattern.matcher(out.toString()); > Assert.assertTrue(matcher.find()); > // Note: Result should be <what version> and NOT <"what > version">! > Assert.assertEquals(argument, matcher.group(1)); > } > {code} > Note that the same test passes if the space is removed from the argument. > Please also note, that I am not trying to start an external Java process, but > this is merely an example that I assume will work on every developers machine. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira