유닉스 쉘 스크립트를위한 파일 확장자


45

Wikipedia에서 .sh에 대한 기사 는 다음과 같이 말합니다.

.sh 파일 확장자 유형은 Bourne shell을 참조하십시오 .

다른 유닉스 쉘은 어떻습니까?

파일 내부 에서 shebang 이 사용 되어 인터프리터를 실행 한다는 것을 알고 있지만 궁금합니다.

  • 파일 확장자의 장점과 단점은 무엇입니까?

4
때로는 shebang이없는 (또는 exec 권한이없는) 셸 스크립트를 찾을 수 있습니다. 이 경우 .sh로 끝나는 이름은 사용자가 bash script.sh(또는 sh물론) 이를 실행하는 힌트가 될 수 있습니다 .
Ansgar Esztermann

3
쉘 스크립트에 확장자가 있으면 일반적으로 .sh입니다. .ksh 또는 .bash 스크립트를 본 적이 없습니다. 예를 들어 /etc/init.d/*의 모든 스크립트와 같이 대부분의 쉘 스크립트에는 확장명이 없습니다.
Richard Holloway

단순한 결론 (예 또는 아니오)이 의견이지만 고려해야 할 사항은 없습니다.
ctrl-alt-delor

답변:


35

난 단지 부를 것이다 .sh무언가 의미 이식을 (희망 이다 휴대용).

그렇지 않으면 언어를 숨기는 것이 낫다고 생각합니다. 주의 깊은 독자는 어쨌든 shebang 라인에서 찾을 것입니다. (실제로, .bash또는 .zsh, 등등 ... 접미사는 거의 사용되지 않습니다.)


1
이 페이지만으로도 이미 그 페이지를 사용하는 사람들이 상당히 많지 않습니다. 왜 "드물게 사용된다"고 말합니까? 어떤 인용? 아니면 이것은 단지 당신의 경험에 근거한 것입니까?
Pacerier

23

필자는 기술적으로 파일 확장자에 대한 "우수 사례"가 존재하지 않는다고 말하고 싶습니다. Unix / Linux / * BSD 파일 시스템은 확장자 자체를 지원하지 않습니다. 확장명이라고 부르는 것은 단일 파일 이름의 접미사 일뿐입니다. 이는 inode-moral-equivalent의 특수 지점이 확장을 위해 예약 된 VM / CMS, VMS, MS-DOS 및 Windows 파일 시스템 및 OS와 다릅니다.

그 작은 소리가 이제 끝났다. 쉘 스크립트 파일 이름에 ".sh"또는 ".ksh"또는 ".bash"접미사를 붙이는 것은 약간 어리석은 생각이다. 프로그램은 프로그램입니다. 실행되는 내용을 구별 할 때 이점이 없습니다. 유닉스 나 리눅스 또는 커널이 파일 이름 접미사 때문에 일부 파일에서 인터프리터를 호출하기로 결정한 것은 없습니다. 그것은 모두 #!파일의 시작 부분에서 줄 또는 다른 "마법의 숫자"바이트 시퀀스에 의해 수행됩니다. 실제로 "확장자"파일 이름을 기반으로 실행할 항목을 결정하는 것이 Windows를 맬웨어로 만드는 요인 중 하나입니다. "something.jpg.exe"라는 파일이 포함 된 Windows 맬웨어 사기 수를 확인하십시오. 기본적으로 최신 Windows에는 ".exe"확장자가 표시되지 않으며 사용자가 "

미리 명령으로 생각할 수있는 것은 종종 어쨌든 쉘 스크립트입니다. 때때로 ccsh- 스크립트 firefox였으며 sh- 스크립트, startxsh- 스크립트입니다. 스크립트에 ".sh"접미사를 표시하면인지 적 또는 조직적 이점이 없다고 생각합니다.


24
동의하지 않습니다! 내 직업은 바이너리 실행 파일부터 셸 스크립트 (ksh, bash 및 일부 레거시 csh)에 이르는 수천 개의 파일이 포함 된 응용 프로그램을 패키징하는 것입니다. 나를 위해, 나를 믿지는 않는 우리가 논의하고 우리가 찾고있는 종류의 파일을 한 눈 (또는 정규식에서) 알고 할 수 차이를 확인하십시오. 내 요점은 수행 되는 내용을 구별하는 데 도움 이 될 수 있으며 모범 사례 는 파일 형식을 명시 적으로 언급하도록 권장해야한다는 것입니다.
rahmu

4
@rahmu : 답변으로 작성하십시오. 정규식 구별 가능한 이름이 해당 응용 프로그램을 패키지화하고 유지 관리하는 데 어떻게 도움이되는지에 대해 구체적으로 설명하십시오. 파일과 파일 이름의 접미사를 해석하는 것과 작업을 수행하는 데 도움이되는 방법 간의 상호 작용에 특히 유의하십시오. 나는 내 견해에 대한 진지한 논쟁에 관심이 있으며, 확신한다면 변할 것입니다. 나는 그것을 증명하기 위해 귀하의 의견을 찬성했습니다.
Bruce Ediger

3
불행히도 나는 현재 직장에서의 현재 경험에 대해서만 이야기하고 싶습니다. 나는 일반적으로 좋은 연습과 표준 대해 잘 모른다 ; 여기에 답변을 게시하기 전에 조사를해야한다고 생각합니다. 나는 :) 일 이후에 오늘 밤을 살펴 보겠습니다
rahmu

2
@rahmu "file"명령은 파일 유형을 결정하기 위해 존재합니다. 다른 쉘용으로 작성된 스크립트를 구별 할 수 있습니다.
Matt

3
쉘 스크립트에 .sh확장자 를 주면, .sh시작할 때 명령 이름의 일부로 이를 입력해야 합니다. 그것이 확장을 넣는 것을 좋아하지 않는 주된 이유입니다 (세방 라인이있는 것과 동일). BTW, Windows의 문제는 .exe접두사 그 자체가 아니며 (결국 image.jpgLinux에서 이름 을 가진 실행 파일을 만드는 것은 사소한 일이지만) Windows가 일반적으로 해당 확장명을 숨기고 실행 파일을 시작하는 데 필요한 작업과 문서를 여는 것은 정확히 같습니다.
celtschk

12

다수의? nix 환경에서 일한 사람으로서 저는 다양한 껍질로 글을 써야했습니다. 믿거 나 말거나, 플랫폼 전체에서 쉘이 동일하지 않습니다. 따라서 개인 라이브러리를 여러 셸로 유지 관리하는 경우 (필요한 경우) 확장을 사용하여 셸을 식별하는 것이 매우 유용합니다. 그렇게하면 다른 플랫폼으로 옮길 때 쉘이 약간 다를 때 수정 대상 스크립트를 알 수 있습니다. .sh .ksh .bsh .csh ...



당신은이 없나요 #!스크립트 (예 : 시작시 #!/bin/bash)?
ctrl-alt-delor

Gnu / Linux, BSD 및 UNIX는 모두 Unix입니다. ? nix가 필요 없습니다. Linux는 커널이며 안드로이드는 Linux를 사용하지만 Unix는 아닙니다 (추가 소프트웨어를 추가하지 않는 한 Unix 앱이있는 경우).
ctrl-alt-delor

@ ctrl-alt-delor : "Unix"는 상표 입니다. 사람들은 종종 상표권 문제 (및 pedants)를 피하기 위해 "? nix"를 사용합니다.
JS.

@JS`UNIX '는 The Open Group의 상표입니다. 유닉스와 유닉스는 greens.org/about/unix.html
ctrl-alt-delor

5

당신이 말했듯이, 유닉스 파일 확장자는 순수한 정보입니다. 올바른 shebang을 가지고 실행 가능하도록 스크립트가 필요합니다.

확장명이 없거나을 사용할 수 있습니다 .sh.

나는 사용 된 쉘 (csh, tcsh, bash, sh, ...)에 관계없이 다음 규칙을 개인적으로 사용합니다.

  • 시스템 또는 고급 스크립트에 대한 확장명 없음 (매우 드문 경우)
  • .sh고급 고전 스크립트, 낮은.

"클래식 스크립트, 저급에서 고급까지"는 무슨 뜻입니까?
Pacerier

나는 그것이 추상화 또는 조직 수준을 의미한다고 생각합니다. 즉, 일부 명령 뒤에 어떤 언어 / 스크립트 도구가 사용되는지 상관하지 않으므로 확장명을 사용하지 마십시오. 다른 사람들에게는 그것이 bash 또는 이국적인 ksh 쉘 스크립트 (올바른 확장명)라는 것을 아는 것이 좋습니다. ... 그러나 그것은 2 년 전이었습니다.)
Ouki

5

실행 파일은 서로 호환되지 않으므로 확장 프로그램을 사용해서는 안됩니다. 쉘 스크립트가 있다고 가정하고 a.shpython으로 다시 작성한다고 가정 a.py하면 스크립트를 호출하는 모든 프로그램을 변경해야하며 구현 세부 정보가 유출됩니다.

Mircosoft의 Windows에서 전체 파일 이름 확장자는 엉망입니다. 예를 들어 a.audio, b.audio, c.audio, is a.mp3, b.wav, c.oggd.picture, e.picture, f.pictureis 가 될 수 있습니다 d.jpeg, e.png, f.gif. 우리는 대부분 오디오 나 사진의 형식을 신경 쓰지 않습니다. 또한 새로운 사용자에게 모든 파일 확장자를 가르치는 데 오랜 시간을 소비해야합니다.


또 다른 이유는 사용하지 *.sh데비안의가 있다는 것입니다에 난 그냥 실행 run-parts등과 같이 확장자를 가진 스크립트를 실행하지 않습니다 /etc/cron.*/: archive.oreilly.com/pub/post/runparts_scripts_a_note_about.html
로스 패터슨

3

쉘 스크립트 확장은 매우 유용합니다. 예를 들어, 종종 같은 디렉토리에 여러 언어로 된 여러 파일 (예 : bash, awk 및 lua)이있는 스크립트를 작성합니다. bash 파일에서만 문자열을 검색 해야하는 경우 확장 프로그램은이를 매우 유용하게하여 오 탐지를 줄입니다. 또는 해당 프로젝트에 대한 모든 bash 코드의 행 수를 원할 경우.

프로그램을 실행할 때 확장명을 입력 해야하는 것은 고통 스럽기 때문에 매번 확장 프로그램을 입력 할 필요없이 기본 실행 파일의 확장명없이 symlink를 작성하여 편집 / 실행합니다. Symlink는 저렴하고 쉽습니다.



2

다른 사람들이 말했듯이, 쉘은 확장에 신경 쓰지 않습니다. 그러나 사람이 파일을 빠르게 식별 할 수 있습니다. 나는 파일이 끝나는 참조 .py또는 .sh내가 빨리 (최소한)가되어야 하는지를 알고있다. Steve가 말했듯이 파일 확장자로 검색하거나 줄 수를 계산하는 것도 실용적인 고려 사항입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.