Java 无法从程序执行系统命令

Java 无法从程序执行系统命令,java,linux,sed,Java,Linux,Sed,我已经测试了以下方法从我的程序执行Linux命令 方法1:将所有内容分配到字符串中 String temp1 = "'/"+t2+"/,/"+t1+"/p'"; String command2 = "sed -n "+temp1+" app.log"; Process p1 = Runtime.getRuntime().exec(command2); 方法2:使用数组 String [] command2 = new String []{"sed","-n","'/",t2,"/,/",t1

我已经测试了以下方法从我的程序执行Linux命令

方法1:将所有内容分配到字符串中

String temp1 = "'/"+t2+"/,/"+t1+"/p'";
String command2 = "sed -n "+temp1+" app.log";
Process p1 = Runtime.getRuntime().exec(command2);


方法2:使用数组

String [] command2 = new String []{"sed","-n","'/",t2,"/,/",t1,"/p'", "app.log";
System.out.println("The command2 is : "+Arrays.toString(command2);
Process p2 = new ProcessBuilder(command2).start();


这是我对方法2的参考,但这两种方法都不起作用。这是我希望在终端中运行的命令,sed-n'/14:32:54/,/14:33:44/p'app.log

这是我调用系统命令的代码的一部分,在
第2行
变量中没有显示任何内容

String [] command2 = new String []{"sed","-n","'/",t2,"/,/",t1,"/p'","stlog.txt"};
Process p2 = new ProcessBuilder(command2).start();
BufferedReader br2 = new BufferedReader(new InputStreamReader(p2.getInputStream()));
String line2;
while((line2 = br2.readLine()) != null)
   {
      System.out.println(line2);
   }
就我而言:

 ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", "pwd")
                    .directory(new File("some.directory.path"));
 Process process = processBuilder.start();
或者您可以使用ProcessBuilder进行sip,只需调用

String command = "ping www.google.com";
String[] commandArray = {"/bin/bash", "-c", "pwd"}; 
Runtime.getRuntime().exec(commandArray);
“/bin/bash”0表示您将在巴赫中执行命令

“-c”-定义下一个参数为命令

命令-使用终端执行的任何命令,如“ping www.google.com”或“/script.sh”

您应该只放置命令而不是“ping www.google.com”,但由于您没有指定目录,脚本将从项目目录执行(您可以通过执行打印当前目录的“pwd”命令来检查)。这就是为什么ProcessBuilder更可取的原因,因为您可以在其中指示执行目录(将“some.directory.path”替换为dir)


上面的语句会不会执行
sed-n'/t2/,/t1/p'stlog.txt
,即在正则表达式中有大量不必要的空格,或者更糟糕的是,将七个参数传递给
sed
<代码>“sed”、“-n”、“'/”+t2+“/,/”+t1+“/p'”、“stlog.txt”可能是一种快速解决方案。能否提供有关快速解决方案的更多解释?这通常是一个路径问题。。。您是否尝试通过
sed
(通常为
/usr/bin/sed
)的完整路径?当然不是,它需要完整路径吗?请告知,我是Linuxso的新手,所以你的意思是我需要用我的“sed”替换“pwd”?我已经用“ping www.yahoo.com”或“grep apple app.log”这样的短命令进行了测试,很有效。当命令变得越来越长时,它就不能用程序调用了。我的意思是你需要传递所有3个参数(“/bin/bash”,“-c”,command),其中command=real你想在终端执行的命令。帖子中提供的命令将尝试其他任何命令。在我的终端中显示此错误“找不到适合执行的方法”(String,String,String)“当我传入所有三个参数时
.directory(new File("path/to/some/dir"));