"she-bang"은 왜 "#!"으로 시작하나요?

"she-bang"은 왜 "#!"으로 시작하나요?

"she-bang"은 왜 ,로 #!시작 하나요 #!/bin/bash? 나는 이것이 어떻게 이루어지는지 항상 인정해 왔지만, 그 뒤에 이유가 있습니까?

#왜 이것은 시작하는 일반적인 코멘트가 아닌가? 아니면 이것이 논평되어야 할 주요 요점입니까?

답변1

대개셰르본#!( 종종 "bang" 이라고 !불리며 "she"는 "SHArp" 또는 "haSH"를 변형한 것 같습니다.# ) - 전체 라인이 호출됩니다.셰르본 라인

무엇을 해야할지 모르는 것들과의 하위 호환성을 위해 의도적으로 주석 문자로 시작합니다. 아마도 !시작 파일에 대한 임의의 주석과 구별하기 위해 그것으로 시작하는 파일은 인터프리터를 # this is my script!실행하려고 시도하지 않습니다.this is my script!

답변2

이를 이해하려면 스크립트의 첫 번째 줄이 실제로 읽혀진다는 점을 알아야 합니다.두 배, 2가지 다른 절차를 통해. 처음으로 커널은 파일을 열고 #!첫 번째 줄에서 이 문자 시퀀스( )를 찾습니다. 발견되면 거기에 표시된 쉘 프로그램을 실행하고 파일 이름을 인수로 전달합니다. (예를 들어 파일이 /home/me/foo로 시작 하면 #!/bin/sh커널이 실행됩니다 /bin/sh /home/me/foo).

다음으로, 쉘( bin/sh또는 지정된 인터프리터)은 파일을 읽습니다. 쉘은 shebang 라인에 대해 아무것도 모르지만 파일의 다른 라인과 똑같기 때문에 여전히 첫 번째 라인을 읽습니다... 모든 라인을 읽습니다. 쉘이 어떤 식으로든 충돌하거나 동작을 변경하는 것을 원하지 않습니다. 이를 수행하는 방법은 주석으로 처리하고 무시하도록 하는 것입니다. 따라서 커널 명령어를 시작하는 가장 좋은 문자는 주석 문자입니다.

답변3

주석이 있어야만 "interpretername scriptname"과 같은 스크립트를 실행할 수 있기 때문입니다. "!"의 유래를 모르겠습니다.

관련 정보