bash 스크립트에 .sh 또는 .bash 확장명을 사용 하시겠습니까?


36

( Ubuntu-OSX 호환성 및 사용 용이성 및 POSIX에 대해서는 #! / bin / sh 또는 #! / bin / bash 사용을 참조 하십시오 )

스크립트에서 bash 셸을 사용하려면 .bash 확장명을 사용하여 실제로 bash를 호출하거나 system config / 1st shebang 줄에 의존합니까? 둘 다 유효하지만 다른 경우, 어느 것이 우선합니까?

"shell script"를 표시하기 위해 .sh로 스크립트를 종료 한 다음 첫 번째 줄에서 bash 쉘 (예 #!/usr/bin/env bash:)을 선택 하거나 .bash로 종료할지 (줄 1 설정) 여부를 잘 모르겠습니다. ). bash를 호출하고 싶습니다.


3
나는 .bash확장을 본 적이 없다고 생각 합니다. 또한 bin폴더 중 하나에 확장명이없는 스크립트를 패키지로 작성하는 것이 데비안 정책 입니다.
muru

답변:


19

.bash 확장자를 사용하여 실제로 bash를 호출하거나 시스템 구성 / 1st shebang 라인에 의존합니다.

인터프리터를 명시 적으로 사용하지 않으면 호출되는 인터프리터 shebang는 스크립트 에서 사용되는 것으로 결정됩니다 . 인터프리터를 구체적으로 사용하는 경우 인터프리터는 스크립트에 어떤 확장자를 제공하든 상관하지 않습니다. 그러나 확장 기능은 다른 스크립트가 어떤 종류의 스크립트인지 명확하게 보여줍니다.

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"

참조 .pybash는 스크립트 확장이 파이썬 스크립트를하지 않습니다.

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax

항상 bash스크립트입니다.

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script

23

스크립트의 이름은 스크립트 실행 방법과 관련이 없습니다.

shebang 행은 스크립트를 실행하는 데 사용되는 인터프리터를 정의합니다.

나는 개인적으로 스크립트가 sh, bash, perl인지 상관하지 않습니다. 확장 기능을 추가하는 것을 발견했습니다. 내가 file scriptname알고 싶다면 파일이 무엇인지 알아 내야합니다.

당신이 원하는 경우 귀하의 스크립트가 실행되는 bash사용 #!/bin/bash첫 번째 라인으로.


4
또한 스크립트에 대한 구현 선택이 변경되면 (예 : Python, Perl, C ...로 다시 작성 됨), .sh-style 확장자가 없으면 이름을 바꿀 필요가 없습니다. ( .sh확장자를 가진 이진 파일을 생성하는 C 프로그램을 막을 수있는 것은 아무것도 없지만 , 혼란 스러울 것입니다.)
Stephen Kitt

2
#!/usr/bin/env bash이식성에 사용 , 여기에서 논의 stackoverflow.com/a/10383546/54964
Léo Léopold Hertz 준영

4
@wurtel (belted comment, OK?) 확장을 추가하는 것은 중복과 거리가 멀다. 대부분의 편집기는 확장자를 기반으로 구문 강조를 지원하며 파일 형식을 즉시 볼 수 있어야합니다. 명확성과 가독성은 중요합니다.
RolfBly 2012 년

@RolfBly : 내가 사용하는 편집기는 shebang을 인식하고 구문 강조를 제공합니다. 명확성은 유용하지만 대부분의 경우 명령을 실행하려고하며 입력을 적게해야하고 구현 언어를 기억할 필요가없는 경우 좋습니다.
Hontvári Levente
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.