Linux는 텍스트 스크립트를 실행할 때 호출할 인터프리터를 어떻게 결정합니까?

Linux는 텍스트 스크립트를 실행할 때 호출할 인터프리터를 어떻게 결정합니까?

Linux가 텍스트 스크립트를 실행할 때 호출할 인터프리터를 어떻게 결정하는지 아는 사람이 있습니까? "shebang"에 대한 세부 정보, 목적 및 수행 방법이 필요합니다.

답변1

스크립트를 실행하는 두 가지 주요 방법이 있습니다.

  • 스크립트를 로드할 실행 파일의 이름을 사용하십시오.

     perl script.pl
    
     python script.py
    

이 경우 쉘은 실행파일을 로드하여 perl인자 python를 제공하는데, 실행파일은 주어진 인자가 스크립트임을 알고 로드하여 실행할 수 있어야 한다.

여기에는 특별한 마법이 없습니다. 쉘은 매개변수를 사용하여 실행 파일을 시작합니다.

  • 스크립트는 실행 가능하며 자체적으로 시작됩니다.

    $ script.sh  
    $ ./script.pl  
    $ /some/path/script.py
    

제어는 호출을 통해 커널에 제공됩니다 execve. 스크립트가 유효한 she-bang(또는 ELF와 같은 실행 파일)이 있는 텍스트 파일인 경우 커널은 파일 시작 부분의 매직 값을 이해하고 지정된 인터프리터를 로드합니다. 그러면 인터프리터는 텍스트 파일을 스크립트로 로드하고 실행합니다.

쉘 호출이 execve실패하는 경우(예: 스크립트에 유효한 she-bang이 없음) 쉘은가능한스크립트를 직접 로드하고 실행합니다. 이것은 bash에 의해 수행됩니다.

그리고 어떤 경우에는 다음으로부터 man bash:

프로그램이 #!으로 시작하는 파일인 경우 첫 번째 줄의 나머지 부분은 프로그램의 인터프리터를 지정합니다. 쉘은 이 실행 가능 형식을 기본적으로 처리하지 않는 운영 체제에서 지정된 인터프리터를 실행합니다.

더 자세한 내용을 알고 싶으시면 다음 사이트를 방문해 주세요.

이것#! 마술, 다양한 Unix 버전의 shebang/hash-bang 메커니즘에 대한 세부 정보

매우 유사한 질문

관련 정보