왜와 "그녀 - 쾅"시작 않습니다 #!
처럼 #!/bin/bash
? 나는 이것이 어떻게 수행되는지 항상 인정했지만 그 뒤에 이유가 있습니까?
왜 #
; 그것은 일반적으로 주석이 아닙니까? 아니면 의견이 있어야 할 시점입니까?
왜와 "그녀 - 쾅"시작 않습니다 #!
처럼 #!/bin/bash
? 나는 이것이 어떻게 수행되는지 항상 인정했지만 그 뒤에 이유가 있습니까?
왜 #
; 그것은 일반적으로 주석이 아닙니까? 아니면 의견이 있어야 할 시점입니까?
답변:
일반적으로 shebang 은 #!
( !
일반적으로 "bang"이라고하며 "she"는 "SHArp"또는 "haSH"의 손상 인 것 같습니다 #
)-전체 행을 shebang 행 이라고합니다.
처리 방법을 모르는 것들과의 역 호환성을 위해 주석 문자로 의도적으로 시작합니다. 은 !
시작 파일 그래서 그냥 파일을 시작하는 임의의 코멘트를 구별하기 위해 아마도입니다 # this is my script!
실행하려고하지 않는 this is my script!
인터프리터
!
은 종종 다른 컨텍스트에서 실행될 명령을 나타 내기 위해 사용됩니다. 예를 들어 vim
자체 명령 줄이있는 다른 프로그램에서 bang은 종종 내부 인터페이스 대신 시스템 쉘에서 명령을 실행하게하는 이스케이프 문자입니다.
이것을 이해하려면 스크립트의 첫 번째 줄이 실제로 두 개의 다른 프로그램에 의해 두 번 읽힌다는 것을 알아야 합니다. 커널은 처음으로 파일을 열고 #!
첫 번째 줄에서 해당 문자 시퀀스 ( )를 찾습니다 . 찾으면 파일 이름을 매개 변수로 전달하여 표시된 쉘 프로그램을 실행합니다. (예 : 파일 /home/me/foo
이로 시작 #!/bin/sh
하면 커널이 실행됩니다 /bin/sh /home/me/foo
).
다음으로 쉘 ( bin/sh
또는 모든 인터프리터 프로그램이 지정된)이 파일을 읽습니다. 쉘은 shebang 행에 대해 아무것도 모르지만 파일의 다른 행과 마찬가지로 첫 번째 행을 읽습니다 ... 모두 읽습니다. 쉘이 어떤 식 으로든 충돌하거나 동작을 변경하는 것을 원하지 않습니다. 그렇게하는 방법은 주석으로 처리하고 무시하는 것입니다. 따라서 커널 명령어로 시작하기에 가장 좋은 문자는 주석 문자입니다.
#!
왜#
(이 라인이 기존 쉘에 의해 무시되어야 했는가)에 대한 설명을 포함하여 (dmr이 기억하는만큼) 의 상당히 자세한 역사가 있습니다.