我正在尝试从 java 代码执行以下操作:
String[] cmd = { "/bin/bash", "netstat -nr | grep '^0.0.0.0' | awk '{print $2}'" };
Process process = Runtime.getRuntime().exec(cmd);
process.waitFor();
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader inputError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line = null;
while ((line = input.readLine()) != null) {
logger.info(line);
}
String lineError = null;
while ((lineError = inputError.readLine()) != null) {
logger.info(lineError);
}
执行此操作时,我没有从输入流获得任何输出。但在错误流中,我看到以下错误:
/bin/bash: netstat -nr | grep '^0.0.0.0' | awk '{print $2}': No such file or directory
我已经验证 /bin/bash 存在,如果我将以下内容放入 sh 文件并执行相同的内容,我会得到正确的输出:
#!/bin/bash
netstat -nr | grep '^0.0.0.0' | awk '{print $2}'
我在 stackoverflow 中研究了很多类似的问题,但没有一个解决方案对我有用。
您需要将要执行的命令作为参数提供给-c
的选项/bin/bash
这样你运行的命令exec
读起来像:/bin/bash -c "netstat -nr | grep '^0.0.0.0' | awk '{print $2}'"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)