gpt4 book ai didi

java - 如何从java在特定目录中执行终端命令

转载 作者:行者123 更新时间:2023-11-29 07:53:52 25 4
gpt4 key购买 nike

我正在尝试在特定目录“/usr/local/freeswitch/bin”中执行 originate 命令,在 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 的符号链接(symbolic link)并放置在当前位置上面的程序显示以下输出

输出

-ERR“找不到原始命令!

就我而言,上面的命令在终端上运行良好,它应该与 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 提供,这会将每个参数作为单独的参数传递给流程,并处理那些需要用引号转义的参数(除非它期待引号,否则无论如何你都应该包括它们)

关于java - 如何从java在特定目录中执行终端命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19312199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com