>Java >java지도 시간 >JSch를 사용하여 Java를 통해 실행할 때 특정 Unix 명령이 '명령을 찾을 수 없음'으로 실패하는 이유는 무엇입니까?

JSch를 사용하여 Java를 통해 실행할 때 특정 Unix 명령이 '명령을 찾을 수 없음'으로 실패하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-28 02:42:11175검색

Why Do Certain Unix Commands Fail with

JSch를 사용하여 Java를 통해 실행할 때 특정 Unix 명령이 "명령을 찾을 수 없음" 오류와 함께 실패함

이 문제는 Java를 통해 Unix 명령을 실행할 때 발생합니다. JSch 라이브러리를 사용합니다. SSH 클라이언트에서 작업하더라도 "air not Found"와 같은 명령이 실패하면 추가 조사가 필요합니다.

근본 원인:

대화형 SSH 세션과 달리, JSch의 "exec" 채널은 의사 터미널을 할당하지 않습니다. 이로 인해 다른 시작 스크립트 세트가 실행되어 다른 환경이 발생할 수 있습니다. 이 경우 PATH 환경 변수가 다르게 설정되어 "air" 실행 파일을 사용할 수 없게 될 수 있습니다.

해결책:

이 문제를 해결하는 여러 가지 방법이 있습니다. 문제(선호도 순):

  1. 전체 경로 실행:
    명령에서 실행 파일의 전체 경로를 사용하여 환경에 대한 의존성을 제거합니다.
  2. 시작 스크립트 수정:
    시작 스크립트를 조정하여 대화형 세션과 비대화형 세션 모두에 대해 일관된 PATH.
  3. 로그인 셸 실행:
    -login 스위치를 사용하여 로그인 셸을 통해 명시적으로 명령을 실행합니다.
  4. 환경 수정:
    명령 자체의 환경을 다음으로 변경합니다. 필요한 PATH 및/또는 기타 변수를 설정합니다.
  5. 강제 의사 터미널 할당:
    (권장하지 않음) setPty(true)를 사용하여 "exec" 채널에 대해 의사 터미널 할당을 강제하지만 잠재적인 부작용에 주의하세요.

관련 문제:

다른 유사한 문제가 발견되어 다음에서 논의되었습니다. 리소스:

  • setPty가 활성화된 상태에서도 JSch를 사용하여 Java를 통해 실행할 때 특정 Unix 명령이 "... 찾을 수 없음"과 함께 실패합니다.
  • JSch를 사용하여 실행된 명령은 SSH 터미널에서와 다르게 동작합니다. ("yes/"no" 확인 프롬프트 메시지 우회)
  • JSch: 사용자 환경 변수를 노출할 수 있는 방법이 있습니까? "exec" 채널?
  • SSH.NET SshClient.RunCommand를 사용하여 실행된 명령(.4gl)이 "해당 파일 또는 디렉터리가 없습니다"라는 메시지와 함께 실패합니다

위 내용은 JSch를 사용하여 Java를 통해 실행할 때 특정 Unix 명령이 '명령을 찾을 수 없음'으로 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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