127 $에서 반환 코드?


답변:


428

/bin/sh주어진 명령이 PATH시스템 변수 내에 없고 내장 쉘 명령 이 아닌 경우 값 127이 리턴됩니다 . 다시 말해, 시스템은 호출하려는 바이너리를 어디에서 찾을 지 모르기 때문에 명령을 이해하지 못합니다.


55
bash 스크립트에 "+ x"모드는 없지만 실제로 존재하는 경우에도 마찬가지입니다.
MatthewKremer

3
which [program]OS가 사용중인 바이너리를 확인하기 위해 사용할 수 있습니다 . 비어 있으면 다음 단계는 실행 비트와 PATH를 확인하는 것입니다.
four43

10
@ cr125rider which는 특히 정확하지는 않습니다. 별칭, 셸 함수, PATH 조회 메모 또는 셸 상태 내부의 다른 요소에 대해서는 알지 못합니다. type셸 을 사용 하는 것이 훨씬 낫습니다 .
Charles Duffy

5
이것은 또한 Windows 줄 바꿈이있는 파일로 나에게 일어났습니다. 줄 끝을 유닉스 형식으로 수정하면 문제가 해결되었습니다
Mitkins

4
@ MatthewKremer : 실제로는 126( 내용에 관계없이) 실행 불가능한 파일을 호출하려고 할 때가 Permission denied아니라 ( )를 얻습니다 127. 이와 유사하게, 실행하기 위해 디렉토리 도 결과 126( is a directory).
mklement0

58

일반적으로 다음을 의미합니다.

127-명령을 찾을 수 없습니다

그러나 그것은 또한 명령이 있음을 의미 할 수 발견 ,
하지만 명령에 의해 요구되는 라이브러리가 발견되지 않습니다 .


14

127 - command not found

예 : $ caat 오류 메시지는

세게 때리다:

캐럿 : 명령을 찾을 수 없습니다

이제 당신은 사용하여 확인 echo $?


10

쉘 규약은 성공적인 실행 파일은 값 0으로 종료해야한다는 것입니다. 다른 모든 것은 bash 또는 방금 실행 한 실행 파일의 일부에서 일종의 실패로 해석 될 수 있습니다. 참조 $ PIPESTATUS종료 상태 bash는 남자 페이지의 섹션 :

   For  the shell’s purposes, a command which exits with a zero exit status has succeeded.  An exit status
   of zero indicates success.  A non-zero exit status indicates failure.  When a command terminates  on  a
   fatal signal N, bash uses the value of 128+N as the exit status.
   If  a command is not found, the child process created to execute it returns a status of 127.  If a com-
   mand is found but is not executable, the return status is 126.

   If a command fails because of an error during expansion or redirection, the exit status is greater than
   zero.

   Shell  builtin  commands  return  a  status of 0 (true) if successful, and non-zero (false) if an error
   occurs while they execute.  All builtins return an exit status of 2 to indicate incorrect usage.

   Bash itself returns the exit status of the last command executed, unless  a  syntax  error  occurs,  in
   which case it exits with a non-zero value.  See also the exit builtin command below.

8

마지막 종료 프로세스에서 종료 상태가 127 인 경우 외에는 특별한 의미가 없습니다.

그러나 bash는 bash를 사용하여 bash를 쉘로 사용한다고 가정하여 실행하려고 시도한 명령을 실행할 수 없음을 나타냅니다 (즉 찾을 수 없음). 불행히도 프로세스가 상태 127로 종료되었거나 찾을 수없는 경우 즉시 공제 할 수 없습니다.

편집 :
콘솔의 출력을 제외하고는 즉시 공제 할 수 없지만 스택 오버플로이므로 스크립트 에서이 작업을 수행한다고 가정합니다.


2

이 오류는 때때로 속고 있습니다. 실제로 파일이 있어도 파일을 찾을 수 없습니다. 사용중인 편집기로 인해 파일에 읽을 수없는 읽을 수없는 특수 문자가있을 수 있습니다. 이 경우이 링크가 도움이 될 수 있습니다.

-bash : ./my_script : / bin / bash ^ M : 잘못된 인터프리터 : 해당 파일 또는 디렉토리가 없습니다.

이 문제인지 확인하는 가장 좋은 방법은 전체 파일에 echo 문을 간단히 배치하고 동일한 오류가 발생하는지 확인하는 것입니다.


1

스크립팅 언어를 사용하여 프로그램을 실행하려는 경우 스크립팅 언어의 전체 경로 실행할 파일을 포함해야합니다. 예를 들면 다음과 같습니다.

exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');

고마워, 이것은 나를 위해 일했다. 그래서 나는 어떤 gs를하고 스크립트에서 출력 경로를 사용했습니다. 근무 ..
후안

0

IBM 메인 프레임 JCL에 호출중인 unix 스크립트 이름 끝에 추가 문자 나 숫자가 있으면 이러한 오류가 발생할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.