无法从Java程序运行UNIX命令

时间:2013-07-02 15:18:28

标签: java unix sed

我正在尝试创建一个java程序,它接受一些用户输入变量并将它们传递给perl脚本(它实际上在perl脚本中找到某个字符串并用用户输入变量替换它)。这是代码:

    String sedMain = "sed -e ";
    String sedFirstLine = "'s/AAA/"+newFirstLine+"/' -e ";
    String sedNewCntr = "'s/BBB/"+newCntr+"/' -e ";
    String sedNewSpacing = "'s/SPACE/"+newSpacing+"/' -e ";
    String sedNewDmax = "'s/MAX/"+newDmax+"/'";
    String sedFile = " /filepath/myperlscript.pl >  /filepath/myNEWperlscript.pl";
    String sedCommand=sedMain+sedFirstLine+sedNewCntr+sedNewSpacing+sedNewDmax+sedFile;
    System.out.println("SED COMMAND: "+sedCommand);
    String testRun = "touch /filepath/hello.txt";
    Process runSedCommand;
    runSedCommand = Runtime.getRuntime().exec(sedCommand);

我正在使用IDE,当sed命令打印到控制台时,它看起来是正确的。我从控制台复制了sed命令并从终端运行它,它工作正常。我写了一个字符串“testRun”来查看Java中的Process是否存在问题,并创建了文件“hello.txt”。出于某种原因,我的程序没有创建输出perl文件“myNEWperlscript.pl”。我很困惑为什么这不起作用。任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

exec()接受带有程序名称和参数的String []作为其元素,但是您将所有内容连接成一个String,从而有效地丢失了参数。

尝试这样的事情:

String[] cmd = {"sed", "first argument", "second argument"};
Runtime.getRuntime().exec(cmd);

答案 1 :(得分:2)

使用

exec(String[] cmdarray) 

签名。 命令是sed,-e是参数,'s / AAA / \ n /'是另一个参数,依此类推。所以你会有

String[] command = new String[] {"sed", "-e", "s/AAA/\n/", "next parameter without single quotes", , "next parameter without quotes..."}
Runtime.getRuntime.exec(command);

这是你的参数在shell的方式上得到很好格式化的唯一方法,否则奇怪的sruff会发生,因为字符串上第一个标记后的任何引号都会被认为只是一个参数,因此引号可以被转义和那样的事情