我正在尝试从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中已经研究了很多类似的问题,但没有一个解决方案适合我。
答案 0 :(得分:2)
您需要提供要作为-c
的{{1}}选项的参数执行的命令
这样您运行/bin/bash
的命令就像:exec