Shebang 시퀀스가 별도의 파일에 작성된 스크립트에 포함되어 있다고 가정합니다. 예를 들어 스크립트 파일을 만듭니다 example.sh
.
파일에 shebang 시퀀스를 추가하면 다음과 같습니다.
#!/bin/sh
위 명령이 주석(Linux Bash 스크립트에서는 #
일반적으로 주석의 시작으로 간주됨)으로 인식되지 않도록 하려면 어떻게 해야 합니까?
답변1
Shebang은 스크립트가 실행 가능하고 "#!"인 경우에만 실제 Shebang입니다. 파일의 처음 두 문자입니다.
운영 체제는 실제로 파일의 처음 2바이트를 검사하여 그것이 "#"과 "!"에 대한 ASCII 코드인 (16진수) "23"과 "21"임을 알아냅니다.
이러한 내용이 파일 뒷부분에 나타나거나 파일을 직접 실행하지 않으면 해당 줄은 #으로 시작하므로 실제로 주석으로 처리됩니다.
실제로 라인이 다음과 같다면:
#!/bin/sh
그런 다음 운영 체제는 shebang을 찾아서 다음을 실행합니다.
/bin/sh [filename]
그리고/bin/sh
하다스크립트를 실행할 때 shebang 줄을 주석으로 무시하십시오.
주석으로 사용되지 않는 다른 언어 의 경우 #
, 첫 번째 줄을 무시하도록 인터프리터에 특수 플래그를 전달하는 것이 일반적입니다(예: #!/usr/local/bin/tcc -run
).
답변2
원래 쉘에는 이 기능이 없지만 주석이 있습니다. 사용자가 사용할 쉘/인터프리터를 지정할 수 있도록 하는 메커니즘이 필요합니다. 이 메커니즘은 필요에 따라 기존 시스템을 중단해야 합니다(원본 셸용으로 작성된 모든 새 스크립트는 원본 셸 지정을 허용해야 하며, 이 새 셸을 인식하지 못하는(원래 셸의 이전 버전을 실행 중) 이전 시스템을 중단해서는 안 됩니다. 따라서 새 시스템은 향후 사용자에게 부담을 주지 않고 잘못된 트리거의 위험을 줄여야 합니다.
그래서 파일 시작 부분에 특별한 설명을 추가하기로 결정했습니다.
답변3
이는 Denis Ritchie가 UNIX 쉘에서 도입한 메커니즘이므로 Linux 쉘은 이 기능을 상속합니다. 이 "마법의 문자열"에 대해 첫 번째 줄을 검사하는 것은 쉘 자체 내에서이며, 발견되면 shebang 다음에 지정된 인터프리터가 사용됩니다. 이 기능을 언급한 첫 번째 이메일은 일부 bsd4.0 소스 코드에서 인용되었습니다. 여기서 볼 수 있습니다:http://www.in-ulm.de/~mascheck/various/shebang/4.0BSD_newsys_sys1.c.html