[英]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.