【问题标题】:Process Builder Arguments流程构建器参数
【发布时间】:2023-09-22 05:52:01
【问题描述】:
final String commands[] =  {"arp", "-n", "|" ,"grep", "98:5d:ad:3d:36:ef", "|", "awk '", "{print $1}", "'"};
ProcessBuilder pb = new ProcessBuilder(commands); 

给定 MAC 地址,我想检索 IP。
当我将此命令插入终端(ubuntu 16.04)时,它可以工作。
但是当我在JAVA中使用它时它不起作用。

我做错了什么?

只有在我这样运行时才有效:

final String commands[] =  {"arp", "-n"};
ProcessBuilder pb = new ProcessBuilder(commands); 

【问题讨论】:

  • 我只得到这个:exit: 255
  • @Daniele 的回答是正确的——原因是您的 Java 代码不提供 shell 功能,例如将一个命令的输出通过管道传送到下一个命令。
  • 近乎欺骗 *.com/questions/31776546/…*.com/questions/49223605/…ProcessBuilderRuntime.exec 在这方面是相似的,尽管它们有其他区别)

标签: java ubuntu terminal processbuilder arp


【解决方案1】:

您需要调用“sh”并将您的管道命令传递给该程序。 试试:

ProcessBuilder b = new ProcessBuilder( "/bin/sh", "-c",
               "arp -n | grep 98:5d:ad:3d:36:ef | awk '{print $1}'" );

【讨论】:

  • 或者只是运行"arp","-n"并使用String.containsString.indexOf替换grepString.splitScannerStringTokenizer替换awk $1