JSch를 사용하여 Java를 통해 실행할 때 특정 Unix 명령이 "명령을 찾을 수 없음" 오류와 함께 실패함
이 문제는 Java를 통해 Unix 명령을 실행할 때 발생합니다. JSch 라이브러리를 사용합니다. SSH 클라이언트에서 작업하더라도 "air not Found"와 같은 명령이 실패하면 추가 조사가 필요합니다.
근본 원인:
대화형 SSH 세션과 달리, JSch의 "exec" 채널은 의사 터미널을 할당하지 않습니다. 이로 인해 다른 시작 스크립트 세트가 실행되어 다른 환경이 발생할 수 있습니다. 이 경우 PATH 환경 변수가 다르게 설정되어 "air" 실행 파일을 사용할 수 없게 될 수 있습니다.
해결책:
이 문제를 해결하는 여러 가지 방법이 있습니다. 문제(선호도 순):
-
전체 경로 실행:
명령에서 실행 파일의 전체 경로를 사용하여 환경에 대한 의존성을 제거합니다.
-
시작 스크립트 수정:
시작 스크립트를 조정하여 대화형 세션과 비대화형 세션 모두에 대해 일관된 PATH.
-
로그인 셸 실행:
-login 스위치를 사용하여 로그인 셸을 통해 명시적으로 명령을 실행합니다.
-
환경 수정:
명령 자체의 환경을 다음으로 변경합니다. 필요한 PATH 및/또는 기타 변수를 설정합니다.
-
강제 의사 터미널 할당:
(권장하지 않음) setPty(true)를 사용하여 "exec" 채널에 대해 의사 터미널 할당을 강제하지만 잠재적인 부작용에 주의하세요.
관련 문제:
다른 유사한 문제가 발견되어 다음에서 논의되었습니다. 리소스:
- setPty가 활성화된 상태에서도 JSch를 사용하여 Java를 통해 실행할 때 특정 Unix 명령이 "... 찾을 수 없음"과 함께 실패합니다.
- JSch를 사용하여 실행된 명령은 SSH 터미널에서와 다르게 동작합니다. ("yes/"no" 확인 프롬프트 메시지 우회)
- JSch: 사용자 환경 변수를 노출할 수 있는 방법이 있습니까? "exec" 채널?
- SSH.NET SshClient.RunCommand를 사용하여 실행된 명령(.4gl)이 "해당 파일 또는 디렉터리가 없습니다"라는 메시지와 함께 실패합니다
위 내용은 JSch를 사용하여 Java를 통해 실행할 때 특정 Unix 명령이 '명령을 찾을 수 없음'으로 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!