[linux] 스크립트 파일의 시작 부분에 #! / bin / bash를 넣어야하는 이유는 무엇입니까?

나는 전에 Bash 스크립트를 만들었고 #!/bin/bash처음 에는 모두 잘 작동 했습니다.

그것을 넣는 요점이 무엇입니까? 상황이 다를까요?

또한 어떻게 발음 #합니까? 나는 그것이 !“bang”으로 발음 된다는 것을 안다 .

#!발음 은 어떻게 되나요?



답변

* nix 쉘이 어떤 종류의 인터프리터를 실행할지 아는 규칙입니다.

예를 들어, 이전 버전의 ATT는 기본적으로 sh (Bourne 쉘)이고, 이전 버전의 BSD는 기본적으로 csh (C 쉘)입니다.

오늘날에도 (대부분의 시스템에서 bash, “Bourne Again Shell”을 실행하는 ) 스크립트는 bash, python, perl, ruby, PHP 등이 될 수 있습니다. 예를 들어, #!/bin/perl또는을 볼 수 있습니다 #!/bin/perl5.

PS : 느낌표 ( !)는 애정이 “bang”이라고 합니다. 쉘 주석 기호 ( #)를 때때로 “hash”라고 합니다.

PPS : * nix에서 파일 형식과 접미사를 연결하는 것은 “규칙” 이 아니라 규칙 일뿐 입니다. 실행 파일은 바이너리 프로그램뿐만 아니라 백만 스크립트 유형과 다른 것들 중 하나 일 수 있습니다. 따라서의 필요성 .#!/bin/bash


답변

shebang #!실행 파일 ( x mode ) 파일 의 처음 2 바이트 인 경우 shebang을 보다 정확하게하기 위해 execve (2) 시스템 호출 (프로그램 실행 )에 의해 해석됩니다 . 그러나 POSIX 사양execve 은 shebang을 언급하지 않습니다.

그 뒤에는 인터프리터 실행 파일의 파일 경로가 와야합니다 (BTW는 상대적 일 수도 있지만 대부분 절대적 임).

사용자의 인터프리터 (예 :)를 찾는 좋은 트릭 (또는 아마도 좋지 않은 방법python )은 다음과 $PATH같이 env프로그램 을 사용하는 것입니다 (항상 /usr/bin/env모든 Linux에서)

 #!/usr/bin/env python

모든 ELF 실행 파일은 인터프리터가 될 수 있습니다. 사용 #!/bin/cat하거나 #!/bin/true원할 수도 있습니다 ! (그러나 그것은 종종 쓸모가 없을 것입니다)


답변

그것은 shebang 이라고합니다 . 유닉스-스피크에서, #는 샤프 (음악에서와 같이) 또는 해시 (트위터에서 해시 태그와 같은)라고하며! 뱅이라고합니다. 실제로 Bang-bang이라는 !!로 이전 쉘 명령을 참조 할 수 있습니다. 따라서 합치면 haSH-BANG 또는 shebang을 얻습니다.

# 다음 부분! 유닉스에게 어떤 프로그램을 실행시키는 지 알려준다. 지정하지 않으면 bash (또는 sh 또는 zsh 또는 $ SHELL 변수가 무엇이든)로 시도하지만 거기에 있으면 해당 프로그램을 사용합니다. 또한 #은 대부분의 언어에서 주석이므로 후속 실행에서 줄이 무시됩니다.


답변

오두막은 애프터 지정된 프로그램을 사용하는 로더에 대한 지침입니다 #!당신이 그것을 실행하려고 할 때 해당 파일에 대한 인터프리터 등을. 그래서, 당신은라는 파일을 실행하려고하면 foo.sh#!/bin/bash실행이 있음을 상단에, 실제 명령을 /bin/bash foo.sh. 이것은 프로그램마다 다른 통역사를 사용하는 유연한 방법입니다. 이것은 시스템 수준에서 구현 된 것이며 사용자 수준 API는 shebang 규칙입니다.

또한 shebang이 마법 번호 , 즉 파일을 주어진 인터프리터의 스크립트로 식별하는 사람이 읽을 있는 마법 번호 라는 것을 아는 것도 가치가 있습니다.

shebang 없이도 “작동”에 대한 요점은 문제의 프로그램이 사용중인 쉘과 동일한 쉘로 작성된 쉘 스크립트이기 때문입니다. 예를 들어, 자바 스크립트 파일을 잘 작성한 다음 #! /usr/bin/js자바 스크립트 “Shell script”를 갖도록 (또는 비슷한 것을) 넣을 수 있습니다.


답변

운영 체제는 쉘 스크립트를 실행하기 위해 기본 쉘을 사용합니다. 스크립트 시작 부분에 쉘 경로를 언급하면 ​​OS에 특정 쉘을 사용하도록 요청합니다. 이식성 에도 유용 합니다 .


답변

모든 배포에는 기본 셸이 있습니다. Bash는 대부분의 시스템에서 기본값입니다. 기본 쉘이 다른 시스템에서 작업하는 경우 스크립트가 Bash 전용으로 작성된 경우 스크립트가 의도 한대로 작동하지 않을 수 있습니다.

Bash는 kshand 에서 코드를 가져 오면서 수년에 걸쳐 진화했습니다 sh.

#!/bin/bash스크립트의 첫 번째 행으로 추가 하면 OS에서 지정된 스크립트를 호출 shell하여 스크립트에서 따르는 명령을 실행하도록 지시합니다.

#! “해시 뱅”, “시뱅”또는 “샤방”이라고도합니다.


답변

그것은 shebang 이라고합니다 . 숫자 기호와 느낌표 문자 (#!)로 구성되며 / bin / bash와 같은 인터프리터의 전체 경로가 이어집니다. UNIX 및 Linux의 모든 스크립트는 첫 번째 행에 지정된 인터프리터를 사용하여 실행됩니다.