繁体   English   中英

无法从Java程序运行UNIX命令

[英]Unable to run UNIX command from Java program

我正在尝试创建一个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”。 我很困惑为什么这不起作用。 有人可以帮忙吗?

exec()以程序名称和参数为参数的String []作为元素,但是您将所有内容串联在一起成为单个String,因此有效地失去了参数。

尝试这样的事情:

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

使用

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时将被正确格式化的唯一方法,否则,可能会发生怪异的工作,因为字符串的第一个标记之后的任何引号都将被视为只是一个参数,因此可以转义引号,诸如此类那

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM