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 중국어 웹사이트의 기타 관련 기사를 참조하세요!