【发布时间】:2013-07-02 23:28:16
【问题描述】:
我正在尝试创建一个 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中的进程是否有问题,它创建了文件“hello.txt”。但是由于某种原因,我的程序没有创建输出 perl 文件“myNEWperlscript.pl”。我很困惑为什么这不起作用。有人可以帮忙吗?
【问题讨论】:
-
exec() 将带有程序名称和参数的 String[] 作为其元素,但是您将所有内容连接到一个字符串中,因此有效地丢失了参数。
-
所以我应该只写一个包含所有元素的字符串吗?
-
不,你需要创建一个字符串数组
-
只是出于好奇,为什么当我执行“testRun”字符串而不是“sedCommand”字符串时,它起作用了? testRun 不是字符串数组。
-
还有一个 exec() 版本,它接受一个不带参数的命令字符串,尽管 touch 是如何得到一个参数的有点神秘。顺便说一句,你的输出的 shell 重定向可能不起作用,因为你没有调用 shell。