>Java >java지도 시간 >Java 런타임으로 쉘 명령을 어떻게 안정적으로 실행할 수 있습니까?

Java 런타임으로 쉘 명령을 어떻게 안정적으로 실행할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-06 05:43:10555검색

How Can I Reliably Execute Shell Commands with Java's Runtime?

Java 런타임에서 쉘 동작 조작

Java의 Runtime.exec(String) 유틸리티를 사용할 때 특정 쉘 명령 실행 간에 불일치가 발생할 수 있습니다. 이러한 이상 현상을 이해하려면 셸 작업의 메커니즘을 자세히 조사해야 합니다.

셸 책임 이해

셸은 다음을 포함하여 명령 실행을 지원하는 중요한 작업을 수행합니다.

  • 인용 및 공백 처리: 쉘 인수의 정확한 구문 분석을 보장하여 공백이 "My File.txt"와 같은 문자열을 분리하는 것을 방지합니다.
  • 글로브 확장: 실행 전에 글로브(*, ?)가 특정 파일 이름으로 확장됩니다.
  • 리디렉션 관리: 쉘은 명령 출력에 대한 파이프(|) 및 리디렉션(>)을 관리합니다. 및 입력.
  • 변수 및 명령 확장: $HOME과 같은 변수를 확장할 수 있으며 $(pwd)와 같은 명령을 실행하여 명령 문자열에 삽입할 수 있습니다.

처형사유 실패

Runtime.exec(String)을 통해 호출할 때 쉘 종속 명령이 실패할 수 있는 이유:

  • 쉘 기능 부족: Runtime.exec (문자열)은 셸을 호출하지 않고 명령을 실행합니다. 즉, 셸 처리가 부족함을 의미합니다.

해결 방법

간단하지만 불완전함:

Runtime.exec(String[]) 및 사용 쉘 인터프리터에 명령을 전달하면 직접 명령이 가능합니다 실행:

String myFile = "some filename.txt";
String myCommand = "cp -R '" + myFile + "' $HOME 2> errorlog";
Runtime.getRuntime().exec(new String[] { "bash", "-c", myCommand });

강력하고 안전함:

보안과 견고성을 높이려면 ProcessBuilder를 사용하여 셸 책임을 명시적으로 처리하세요.

String myFile = "some filename.txt";
ProcessBuilder builder = new ProcessBuilder(
    "cp", "-R", myFile,
    System.getenv("HOME"));
builder.redirectError(ProcessBuilder.Redirect.to(new File("errorlog")));
builder.start();

위 내용은 Java 런타임으로 쉘 명령을 어떻게 안정적으로 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.