在Runtime.getRuntime()。exec()获取错误:/ bin / bash:没有这样的文件或目录

时间:2017-09-13 13:09:12

标签: java bash macos

我正在尝试从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中已经研究了很多类似的问题,但没有一个解决方案适合我。

1 个答案:

答案 0 :(得分:2)

您需要提供要作为-c的{​​{1}}选项的参数执行的命令

这样您运行/bin/bash的命令就像:exec