繁体   English   中英

如何在Java中以及在其中的grep Channels中执行Core Show channel命令

[英]How to Execute Core Show channels Command in java and also grep Channels in it

我想从大家那里得到帮助。我正在使用Java,我想执行一个用于获取星号中的频道详细信息的命令。 该系统基于linux。 我想同时执行命令“核心显示频道”

以下是在控制台正常启动时的命令和输出。

   asterisk -vvvvvrx 'core show channels' | grep channels

输出是2个有效通道

我正在尝试在Java中使用以下代码

import java.io.IOException;
import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ProcessBuilderExample
{
  public static void main(String[] args) 
  throws IOException, InterruptedException
  {
  String[] commands = new String[]{"asterisk","-rx","core show channels","| grep 'channels'"};
 Process p = Runtime.getRuntime().exec(commands);
    p.waitFor();
   BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
   String line = "";
while((line = br.readLine()) != null) {
      System.out.println(line);
}
    System.out.println("hello");
  }
}

但这并没有向我显示正确的输出,请帮助我解决此问题

您在命令参数和管道之间混为一谈。 当您说cmda | cmdb cmda | cmdb它本质上意味着运行cmda并将其输出作为cmdb的输入传递,而您的代码将字符串“ | cmdb”作为cmda的参数cmda

有几种方法可以修复代码,但是我认为最直接的方法是取消最后一个grep参数:

String[] commands = new String[]{"asterisk","-rx","core show channels"};

然后,当您循环结果时,只需使用String类中的contains()方法检查其是否包含字符串通道

while((line = br.readLine()) != null) {
  if(line.contains("channels")  System.out.println(line);
}

尝试改变

String[] commands = new String[]{"asterisk","-rx","core show channels","| grep 'channels'"};

至:

String[] commands = new String[]{"/bin/sh", "-c", "asterisk -rx 'core show channels' | grep 'channels'"};

原因:

如果我们调用外壳程序命令(/ bin / sh)并将整个命令作为其参数,则竖线将被解释为“ \\ |”(即字面意义为“ |”,而不是管道”),竖线将为正确解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM