0

问题:- 如果可执行命令包含任何空格,则System.exec将省略第一个空格后的字符串内容。

例如:- if command=" /opt/GUIInstaller/installers/abc def gh.bin " 那么 java 只执行命令到/opt/GUIInstaller/installers/abc并导致类似 java.io.IOException 的错误:" /opt/GUIInstaller/installers/abc": error=2, 没有这样的文件或目录

protected void launch(final String command) 
{
    try 
    {
        if(command.contains("null"))
        {
            logger.error("Installer is not located in the specified folder: "+command);
            System.exit(0);
        }
        runTime.exec(command);
    }
    catch (IOException ioException) {
        logger.error(ioException.getMessage(), ioException);
    }
}

我做错了什么,请帮我解决这个问题。

环境:- Java7 update9 + RHEL6

4

2 回答 2

3

如 的 javadocs 中所述Process#exec()exec(String)只需将给定的命令字符串通过StringTokenizer. 如果您通过将令牌传递给自己来完成这项工作exec(),则其中的空格没有问题:

runTime.exec(new String[] {"/opt/GUIInstaller/installers/abc def gh.bin", "--param1=foo"});
于 2013-05-29T11:17:56.943 回答
0

添加

if(command.contains(" ")){command.replace(" ","\\ ");}

在 runTime.exec(command) 之前;

这基本上只是用转义空格替换空格..

编辑:或者让它更顺畅尝试执行这个

runTime.exec(command.replace(" ","\\ "));

不添加上述行..

于 2013-05-29T11:15:28.403 回答