系统命令无法从程序执行

时间:2017-06-01 09:34:31

标签: java linux sed

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

方法1:将all分配到字符串

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的参考link,但两种方法根本不起作用。这是我希望在终端中运行的命令
sed -n '/14:32:54/,/14:33:44/p' app.log

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

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);
   }

1 个答案:

答案 0 :(得分:1)

在我的案例中工作:

 ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", "pwd")
                    .directory(new File("some.directory.path"));
 Process process = processBuilder.start();

或者您可以使用ProcessBuilder进行啜饮,然后调用

String command = "ping www.google.com";
String[] commandArray = {"/bin/bash", "-c", "pwd"}; 
Runtime.getRuntime().exec(commandArray);
  

“/ bin / bash” 0表示您将在巴赫执行exec命令

     

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

     

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

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

.directory(new File("path/to/some/dir"));