如何从java在特定目录中执行terminal命令

如何从java在特定目录中执行terminal命令,java,Java,我试图在特定目录“/usr/local/freeswitch/bin”中执行origine命令,在bin中我必须通过/fs_cli命令运行可执行文件fs_cli,在fs_cli中我必须执行以下命令 originate loopback/1234/default &bridge(sofia/internal/1789) 它在终端工作正常,同样的命令也可以在bin中执行 ./fs_cli -x "originate loopback/1234/default &bridge(sof

我试图在特定目录“/usr/local/freeswitch/bin”中执行origine命令,在bin中我必须通过/fs_cli命令运行可执行文件fs_cli,在fs_cli中我必须执行以下命令

originate loopback/1234/default &bridge(sofia/internal/1789)
它在终端工作正常,同样的命令也可以在bin中执行

./fs_cli -x "originate loopback/1234/default &bridge(sofia/internal/1789)"
我尝试了以下java程序来完成上述任务

Process pr = Runtime.getRuntime().exec("./fs_cli -x \"originate loopback/1234/default &bridge(sofia/internal/1789@192.168.0.198)\"");
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String str = null;
while ((str = br.readLine()) != null) {
    System.out.println(str);
}
我已创建fs_cli的符号链接并放置在当前位置 上述程序显示以下输出

输出

-找不到“ERR”命令

就我所关心的而言,上面的whwn命令在终端上运行良好,它应该与java中的相同,所以它表明我在某个地方错了
请帮助我解决此问题。

使用
ProcessBuilder
并提供
目录
路径

ProcessBuilder pb = new ProcessBuilder(
        "./fs_cli",
        "-x",
        "originate loopback/1234/default &bridge(sofia/internal/1789@192.168.0.198)");
pb.directory(new File("..."));
Process pr = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String str = null;
while ((str = br.readLine()) != null) {
    System.out.println(str);
}
在可能的情况下,您应该将命令参数作为单独的
String
s提供,这会将每个参数作为单独的参数传递给进程,并为您处理需要用引号转义的参数(除非它需要引号,否则您无论如何都应该包括引号)

另一种方法是:

ProcessBuilder processBuilder = new ProcessBuilder( "/bin/bash", "-c", "cd /usr/local/freeswitch/bin && ./fs_cli -x \"originate loopback/1234/default &bridge(sofia/internal/1789)\"" );
processBuilder.start();

为什么你不完整地设置路径,或者/usr/local/freeswitch/bin/fs_cli不起作用?非常感谢,我真的非常激动。我在过去6天一直在做这个,现在它已经结束了。非常感谢,我真的非常激动。我在过去6天一直在做这个,现在它已经结束了