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
但是,當從shell中,它正確顯示:
lsb-release
跨平台管道行為
正如問題中提到的,管道行為不是跨平台的。 Java 創建者無法保證管道在不同平台上一致運作。
替代解決方案
要解決此問題,請考慮以下選項:
String[] cmd = { "/bin/sh", "-c", "ls /etc | grep release" }; Process p = Runtime.getRuntime().exec(cmd);Shell 執行: 使用 sh 指令在 shell 環境中執行管道指令:
以上是為什麼 Java 的 `Runtime.exec()` 使用管道會產生意外的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!