我测试过以下方法从我的程序执行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);
}
答案 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"));