如果命令包含使用java的空格,则无法执行命令

时间:2013-05-29 11:10:54

标签: java linux

问题: - 如果可执行命令包含任何空格,则 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

2 个答案:

答案 0 :(得分:3)

Process#exec()的javadoc所述,exec(String)只需通过StringTokenizer将给定的命令字符串拆分为标记。如果你通过将令牌传递给exec()来完成这项工作,那么这里的空格是没有问题的:

runTime.exec(new String[] {"/opt/GUIInstaller/installers/abc def gh.bin", "--param1=foo"});

答案 1 :(得分:0)

添加

if(command.contains(" ")){command.replace(" ","\\ ");}
在runTime.exec(命令)之前

;

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

编辑: 或者为了让它更顺畅,试着执行这个

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

没有添加上述行..