UNIX 쉘 스크립트에서“#! / bin / sh”줄은 무엇을 의미합니까?


142

쉘 스크립트 튜토리얼을 살펴보고 다음 샘플 프로그램을 찾았습니다.

#!/bin/sh
clear
echo "HELLO WORLD"

#!/bin/sh처음에 주석의 의미가 무엇인지 말해 줄 수 있습니까 ?



2
askubuntu에 대한 좋은 설명 : askubuntu.com/questions/141928/…
fkoessler


답변:


143

shebang 이라고하며 , 스크립트를 실행하는 데 어떤 인터프리터를 사용해야하는지 부모 쉘에 알려줍니다.

예 :

#!/usr/bin/perl   <--perl script'
#!/usr/bin/php <-- php script
#!/bin/false <--- do-nothing script, because false returns immediately anyways.

주석으로 구현되어 해당 행에 나오는 모든 것이 지정된 인터프리터와 "관련되지"않습니다. 예를 들어, 모든 스크립팅 언어는로 시작하는 줄 #이 주석 임을 이해하는 경향이 !/usr/bin/whatever있으며, 특정 언어의 구문 오류 일 수 있는 부분 을 무시합니다 .


6
일반적으로 셸이 아닌 커널이며이를 처리합니다. 쉘은 단순히 exec()파일 에서 시스템 호출을 호출합니다.
tripleee

47

유닉스에서 프로그램을 실행하려고하면 (실행 가능한 비트가 설정된 프로그램), 운영 체제는 파일의 처음 몇 바이트를 봅니다. 이것들은 프로그램의 형식과 실행 방법을 결정하는데 사용될 수있는 소위 "매직 넘버"를 형성합니다.

#!매직 번호 0x2321에 해당합니다 (아스키 테이블에서 찾아보십시오). 시스템이 마법 번호를 발견하면 텍스트 번호를 다루고 있음을 알고 다음 스크립트까지 읽습니다 \n(한계가 있지만 atm을 피합니다). 통역사 (세방 후 첫 번째 인수)를 식별하면 통역사를 호출합니다.

다른 파일에도 마법 번호가 있습니다. 를 통해 비트 맵 (.BMP) 파일을 less살펴보면 처음 두 문자가 BM입니다. 이 매직 넘버는 파일이 실제로 비트 맵임을 나타냅니다.


10

이 스크립트가있는 파일이 실행 가능한 경우 hash-bang ( #!)은 운영 체제에 스크립트를 실행하는 데 사용할 인터프리터를 알려줍니다. 이 경우 /bin/sh예를 들어입니다.

자세한 내용 은 Wikipedia 기사 가 있습니다.


5

첫 번째 줄은 스크립트에 직접 (/ bin / sh run.sh와 달리 ./run.sh;) 실행하면 해당 프로그램 (이 경우 / bin / sh)을 사용하여 해석해야한다는 것을 쉘에 알려줍니다.

또한 일반적으로 -e (오류 발생시) 인수를 전달하거나 다른 프로그램 (/ bin / awk, / usr / bin / perl 등)을 전달하는 데 사용할 수도 있습니다.


-4

#!/bin/sh또는 #!/bin/bash당신이 첫 번째 줄에 사용하지 않는 경우 다음 시스템이 다른 명령으로 해당 스크립트의 모든 명령을 처리하기 때문에 스크립트의 첫 번째 줄 수있다. 첫 번째 #!/bin/sh줄이면 모든 명령을 하나의 스크립트로 간주 ps하고 파일 내부의 명령 이 아니라이 파일이 명령 으로 실행되고 있음을 나타냅니다.

./echo.sh

ps -ef |grep echo
trainee   3036  2717  0 16:24 pts/0    00:00:00 /bin/sh ./echo.sh
root      3042  2912  0 16:24 pts/1    00:00:00 grep --color=auto echo

1
스택 오버플로는 트위터가 아닙니다. "u"및 "1st"와 같은 단어를 실제로 철자가되도록 시간을 내십시오. 적절한 문법과 철자가 중요하므로 참고 서적을 작성하는 데 도움을줍니다. 또한 올바른 형식에주의하십시오. 와 같은 명령 행에서 발행 될 명령과 같은 ps코드 발췌를 #!/bin/sh형식화해야합니다.
Tin Man

나는 여기에서 영어를 정리하려고 노력했지만 여전히 그것이 무엇을 의미하는지 잘 모르겠습니다. 대답은 스크립트의 명령이 별도의 명령으로 실행되고 shebang을 추가하면 스크립트가 프로세스 목록에서 단일 명령으로 표시된다고 말하는 것 같습니다. 이것은 사실이 아닙니다.
tripleee dec
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.