programing

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

bestprogram 2023. 5. 7. 12:01

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

이전에 Bash 스크립트를 만든 적이 있는데, 이 스크립트들은 모두 정상적으로 실행되었습니다.#!/bin/bash처음에

그걸 넣으면 뭐해요?상황이 달라질까요?

또한, 어게발까니합음 어떻게 합니까?#는 그것을 .!"빵"이라고 발음됩니다.

어떻게 있다.#!발음이 됩니까?

*nix 셸은 실행할 인터프리터의 종류를 알 수 있도록 하는 규약입니다.

예를 들어, 이전 버전의 ATT는 sh( 셸)로 기본 설정된 반면, 이전 버전의 BSD는 csh(C 셸)로 기본 설정되었습니다.

오늘날에도 스크립트는 bash, python, perl, ruby, PHP 등으로 실행될 수 있습니다.예를 들어, 다음과 같이 볼 수 있습니다.#!/bin/perl또는#!/bin/perl5.

(PS: 느낌표)!)는 다정하게 "방"이라고 불립니다.셸 주석 기호(#)는 때때로 "스캐너"라고 불립니다.

PPS: *nix에서 접미사를 파일 형식과 연결하는 것은 "규칙"이 아니라 규칙일 뿐입니다.실행 파일은 이진 프로그램, 백만 개의 스크립트 유형 중 하나 및 기타 여러 가지가 될 수 있습니다.따라서 다음의 필요성#!/bin/bash.

좀 더 정확히 말하면, 쉐방. #!실행 파일의 처음 2바이트일 때(x mode) 파일로, execve(2) 시스템 호출(프로그램 실행)에 의해 해석됩니다.하지만 POSIX 사양은 쉐방을 언급하지 않습니다.

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

통역사를 찾기 위한 멋진 속임수(또는 별로 좋지 않은 속임수)(예:python의 ) 파일에 있습니다.$PATH사용하는 것입니다.env 프그램항로(상항)())/usr/bin/env예를 들어 모든 리눅스에서).

 #!/usr/bin/env python

모든 ELF 실행 파일은 인터프리터가 될 수 있습니다.당신은 심지어 사용할 수도 있습니다.#!/bin/cat또는#!/bin/true만약 당신이 원한다면! (그러나 그것은 종종 쓸모가 없을 것입니다)

그것은 쉐방이라고 불립니다.unix-speak에서 #는 샤프(음악에서 처럼) 또는 해시(트위터의 해시태그처럼)라고 하며!는 bang이라고 합니다. (실제로 이전 셸 명령어를 bang으로 참조할 수 있습니다!, bang-bang이라고 합니다.그래서 종합해보면, hash-bang, 또는 shebang이 됩니다.

#! 뒤에 있는 부분은 Unix에서 실행하기 위해 어떤 프로그램을 사용해야 하는지 알려줍니다.지정되지 않은 경우 bash(또는 sh, zsh 또는 $SHELL 변수가 무엇이든)로 시도하지만, 지정된 경우 해당 프로그램을 사용합니다.또한 #은 대부분의 언어에서 주석이므로 다음 실행 시 해당 행은 무시됩니다.

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

Bash는 수년간 코드를 사용하여 발전해 왔습니다.ksh그리고.sh.

추가하기#!/bin/bash 번째 로, 는된 스립의첫줄번, 로OS에항호지다시목출을 하도록 합니다.shell스크립트에 이어지는 명령을 실행합니다.

#!흔히 "샤방", "쉬방" 또는 "샤방"이라고 합니다.

셰방은 로더에게 다음에 지정된 프로그램을 사용하도록 지시하는 것입니다.#!실행을 시도할 때 문제의 파일에 대한 인터프리터로 사용됩니다.그래서, 만약 당신이 파일을 실행하려고 한다면,foo.sh이 있는#!/bin/bash위에서 는 맨위서실실명다같다습니음과입니다./bin/bash foo.sh이것은 다양한 프로그램에 다양한 인터프리터를 사용하는 유연한 방법입니다.이것은 시스템 레벨에서 구현되는 것이며 사용자 레벨 API는 셰방 규약입니다.

또한 셰방이 주어진 통역사의 스크립트로 파일을 식별하는 인간이 읽을 수 있는 마법의 숫자라는 것을 알 가치가 있습니다.

셰방 없이도 "작동"하는 것에 대한 당신의 요점은 단지 문제의 프로그램이 당신이 사용하고 있는 것과 같은 셸에 대해 작성된 셸 스크립트이기 때문입니다.를 들어,은 자바스크립트 잘에 예들어자, ▁a▁and▁very▁for▁file▁could다▁you있▁a니습ascript▁then▁put▁jav를 넣을 수 있습니다.#! /usr/bin/js자바스크립트 "Shell 스크립트"를 사용하는 것.

운영 체제는 기본 셸을 사용하여 셸 스크립트를 실행합니다.그래서 스크립트의 시작 부분에 셸 경로를 언급하면, 당신은 OS에 그 특정 셸을 사용하도록 요청하는 것입니다.휴대성에도 유용합니다.

그것은 셰방이라고 불립니다.여기에는 숫자 기호와 느낌표 문자(#!), 그리고 /bin/bash와 같은 인터프리터에 대한 전체 경로로 구성됩니다.UNIX 및 Linux 아래의 모든 스크립트는 첫 번째 줄에 지정된 인터프리터를 사용하여 실행됩니다.

"본 어게인 셸"에 대한 Bash 표준은 리눅스에서 사용 가능한 많은 셸 중 하나일 뿐입니다.

셸은 명령을 수락하고 실행하는 명령줄 인터프리터입니다.

대부분의 Linux 배포판에서 Bash는 종종 기본 셸입니다.이것이 bash가 쉘의 동의어인 이유입니다.

셸 스크립트는 구문이 거의 동일한 경우가 많지만 때로는 다릅니다.예를 들어 어레이 인덱스는 bash에서 0이 아닌 Zsh에서 1로 시작합니다.Zsh 셸용으로 작성된 스크립트는 배열이 있는 경우 bash에서 동일하게 작동하지 않습니다.

불쾌한 놀라움을 방지하려면 셸 스크립트가 bash shell용으로 작성되었음을 인터프리터에게 알려야 합니다.어떻게 하는 거지?

bash 스크립트를 #!/bin/bascript로 시작하기만 하면 됩니다.

뒤에 몇 다른 변수가 됩니다. 를 들어, #!/bin/bash의 경우에는 다음과 같습니다. 예를 들어
#!/bin/bash -v -x
더 많은 아이디어를 얻기 위해 이것을 읽으세요.
https://unix.stackexchange.com/questions/124272/what-do-the-arguments-v-and-x-mean-to-bash .

라이브러리를 쉽게 사용할 수 없는 다른 시스템을 사용하는 사용자에게 유용할 수 있습니다.이 명령이 선언되지 않고 스크립트에 해당 시스템에서 지원되지 않는 일부 기능이 있는 경우 #/bin/bash를 선언해야 합니다.저는 예전에 직장에서 이 문제에 부딪힌 적이 있는데 지금은 이 문제를 실습에 포함시키고 있습니다.

언급URL : https://stackoverflow.com/questions/8967902/why-do-you-need-to-put-bin-bash-at-the-beginning-of-a-script-file