Java Runtime.getRuntime().exec和垂直条

Java Runtime.getRuntime().exec和垂直条,java,linux,terminal,openssl,Java,Linux,Terminal,Openssl,我尝试运行以下命令以仅获取一行内存状态 Runtime.getRuntime().exec("free -m | grep 'Mem'"); 但它返回结果的所有行。垂直条后的命令不被处理。我还尝试: Runtime.getRuntime().exec(new String[] { "free", "-m", "|", "grep", "Mem" }); 而且它也不起作用。带“|”的管道只能在shell中使用,但若使用runtime.exec(),就并没有shell。它只是执行另一个进程。因此

我尝试运行以下命令以仅获取一行内存状态

Runtime.getRuntime().exec("free -m | grep 'Mem'");
但它返回结果的所有行。垂直条后的命令不被处理。我还尝试:

Runtime.getRuntime().exec(new String[] { "free", "-m", "|", "grep", "Mem" });
而且它也不起作用。

带“|”的管道只能在shell中使用,但若使用runtime.exec(),就并没有shell。它只是执行另一个进程。因此,管道被简单地忽略了。在您的例子中,可以通过在java程序中使用正则表达式匹配器来提取结果来解决这个相对简单的问题。

提示:竖条是一个管道,由shell而不是java来解释。