Google의 셸 스타일 가이드에서는 셸 옵션을 설정하기 위해 "set"을 사용하도록 권장하는 것은 무엇입니까?

Google의 셸 스타일 가이드에서는 셸 옵션을 설정하기 위해 "set"을 사용하도록 권장하는 것은 무엇입니까?

Google의 셸 스타일 가이드:

Bash는 실행 파일 실행을 허용하는 유일한 쉘 스크립팅 언어입니다.

실행 파일은 #!/bin/bash최소한의 플래그로 시작해야 합니다. set스크립트를 호출해도 bash script_name기능이 중단되지 않도록 셸 옵션을 설정하는 데 사용됩니다 .

set특히 기능 손상을 방지하기 위해 사용하는 부분입니다. 이렇게 특정한 방식으로 부르는 것이 그것과 무슨 관련이 있습니까?

답변1

"최소 플래그 수"는 hashbang 라인에 설정된 플래그를 나타냅니다. 스크립트가 시작될 때 읽혀 ./somescript지고 커널은 hashbang 줄을 읽고 거기에 있는 경로와 옵션에서 새 인수 목록을 만듭니다. 하지만 그렇습니다아니요bash somescript스크립트 자체가 아닌 커널을 실행해야 하기 때문에 스크립트가 실행되는 경우 bash이런 일이 발생할 수 있습니다 . 쉘 자체는 이 행을 결국 스크립트를 읽을 때 무시되는 주석으로 처리합니다.

예를 들어 다음 스크립트( ./hello)를 시도해 보십시오.

#!/bin/bash -x
echo hello

두 가지 방법으로 실행하십시오.

$ ./hello
+ echo hello
hello
$ bash hello
hello

-x추가 추적 출력은 첫 번째 경우에만 표시되며 두 번째 호출에서는 플래그가 무시됩니다.

명령을 사용하여 set플래그를 명시적으로 활성화하면 다음과 같은 방식으로 작동하게 됩니다.

#!/bin/bash
set -x
echo hello

(그러나 사용하려고 하면 주의하세요 perl.하다또한 hashbang 라인 자체에 대해서도 설명합니다. )

관련 정보