ホームページ >Java >&#&チュートリアル >Java の「Runtime.exec()」がパイプで予期しない結果を生成するのはなぜですか?
Java のパイプと Runtime.exec()
次の Java コードを考えてみましょう。
String commandf = "ls /etc | grep release"; try { Process child = Runtime.getRuntime().exec(commandf); child.waitFor(); InputStream i = child.getInputStream(); byte[] b = new byte[16]; i.read(b, 0, b.length); System.out.println(new String(b)); } catch (IOException e) { e.printStackTrace(); System.exit(-1); }
プログラムの出力は次のとおりです:
/etc: adduser.co
ただし、から実行した場合シェルでは、正しく表示されます:
lsb-release
クロスプラットフォームのパイプ動作
質問で述べたように、パイプの動作はクロスプラットフォームではありません。 Java 作成者は、パイプが異なるプラットフォーム間で一貫して動作することを保証できません。
代替ソリューション
この問題に対処するには、次のオプションを検討してください:
String[] cmd = { "/bin/sh", "-c", "ls /etc | grep release" }; Process p = Runtime.getRuntime().exec(cmd);
以上がJava の「Runtime.exec()」がパイプで予期しない結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。