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

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

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

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



답변

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

예 :

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

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


답변

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

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

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


답변

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

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


답변

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

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


답변

#!/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


답변