스크립트를 실행하기 위해 .sh 파일 대신 .txt 파일을 실행 가능하게하지 않는 이유는 무엇입니까?


18

명령을 .sh파일 안에 넣고를 .txt사용하여 실행 가능하게하여 동일한 스크립트를 수행 할 수 있기 때문에 실행 가능한 명령을 파일 내에 넣어 단일 스크립트를 작성 해야하는 것이 무엇인지 궁금 했습니다 chmod.

나는 이것이 파일 확장자로 수행 할 수 있다고 가정합니다. 그래서 나는 .sh확장 의 필요성에 대해 상당히 혼란스러워 합니다. 도움을 주시면 감사하겠습니다.


19
유닉스는 전통적으로 파일 확장자를 신경 쓰지 않습니다. 그래서 당신은 맞습니다-그것은 중요하지 않습니다. 그것은 독자들에게 그것이 쉘 스크립트라는 것을 명백하게하기 위해
vidarlo

8
Linux에서 파일 확장자는 실제 방식으로 OS에서 사용되지 않습니다. .sh 확장자를 넣으면 파이썬이나 펄 스크립트와 같은 다른 유형의 파일과 달리 쉘 스크립트임을 사용자에게 알려줍니다. 개인적으로, 나는 스크립트에 확장을 두지 않습니다.
doneal 24

2
그것은 당신이나 다른 사람이 그것을보고 쉘 스크립트라고 말하면됩니다. 어떤 .txt 파일을 실행할 스크립트인지, 어떤 텍스트를 편집기에서 열 것인지에 대해 신경 쓰지 않는다면 모든 이름을 .txt로 지정하십시오!
daboross

2
right.txt, but.txt if.txt everything.txt ends.txt with.txt the.txt .txt .txtsuffix.txt, you.re.txt not.txt helping.txt yourself.txt (또는 .txt anybody.txt else .txt) understand.txt what.txt each.txt file.txt는 .txt for.txt입니다.
leftaroundabout

1
이것은 중복 된 것으로 보이는 질문 과 유사 하지만 그 질문에 실제로 대답하지는 않습니다.
Kenny Evitt

답변:


47

올바르게 찾은대로 파일 확장자가 특정 항목과 일치하지 않아도됩니다.

유닉스 계열 시스템에서 파일 유형은 일반적으로 파일의 내용 (예 : 처음 몇 바이트의 "매직 번호"또는 기타 특성 구조)에서 파생되며 이름이 아닙니다. 확장명을 완전히 생략 할 수도 있습니다.이 확장명은 종종 실행 파일에 대해 수행됩니다.

file명령을 확인하면 내용에서 파일 유형에 대해 찾을 수있는 정보가 표시됩니다.

실행 스크립트의 경우 시스템은 첫 번째 줄에 소위 "shebang"을 기대합니다.

#!/usr/bin/env python3

스크립트 파일을 인수로 사용하여 인터프리터로 실행할 프로그램을 나타냅니다. 그러한 shebang없이 텍스트 파일을 실행하면 기본 쉘, 즉 Bash를 사용하여 텍스트 파일을 시도하고 해석합니다.

따라서 유닉스 / 리눅스 시스템에서 파일 이름 확장자는 대부분 사용자가 특정 파일에 포함될 것으로 예상되는 것을 빠르게 인식 할 수있는 힌트입니다. 예를 들어 파일을 더 빨리 찾는 데 도움이되는 규칙이기도합니다.

그러나 이름과 확장자가 중요한 일부 예외가 있습니다 (예 : 명명 규칙을 따라야하는 일부 시스템 구성 파일 또는 많은 이미지 뷰어 및 편집기에서도 파일 유형을 나타 내기 위해 확장자가 필요합니다).

또한 한 번 봐 가질 수 있습니다 파일 확장자 (운영 체제) 어떤 목적을 가지고 있습니까를?


3
셸에서는 파일 확장자가 중요하지 않지만 GUI 운영 체제에서는 더블 클릭이 제대로 작동하도록하려면 파일 확장자가 필요합니다.
BallpointBen

@BallpointBen 두 지점은 관련이 없습니다. GUI 하에서도 파일의 "유형"은 메타 데이터로 함께 저장 될 수 있으며 확장명에 관계없이 특정 실행을 트리거 할 수 있습니다. MacOS는 파일 이름 확장자가없고 GUI이며 잘 유지됩니다.
Patrick Mevzek

1
@PatrickMevzek MacOS는 어떻게 확장 기능이 없습니까? 나는 그것들을 보여 주었고 모든 파일에는 그것들이 있습니다. 뭔가 빠졌습니까? 저는 MacOS 플랫폼을
처음 사용

1
@ CiprianTomoiagă 당신은 당신이 원하는대로 파일의 이름을 지정할 수 있습니다, OS는 파일에서 올바르게 작동하기 위해 확장명이 필요하지 않습니다. 예 : howtogeek.com/192628/…
Patrick Mevzek

1
@barbecue는 최저 공통 분모를 목표로합니다. 무엇이 발생할 수 있습니까 :-) ). 실제로, 상호 운용성을 위해 파일 확장자가 좋습니다. 이것은 기본적으로 DOS에 의해 도입 된 결함이며 다양한 OS가 확장자가없는 파일에 완벽하게 만족한다는 것을 알아야합니다.
Patrick Mevzek

3

UNIX / Linux 파일 이름에는 파일 "extension"또는 "type"이 없습니다.

다른 사람들이 지적했듯이 "유형"은 시스템에서 관련 마법을 사용할 수 있다고 가정하고 파일 명령을 사용하여 찾을 수 있습니다. UNIX / Linux 파일 이름은 일반적으로 사용 가능한 문자를 포함 할 수 있지만 사람과 기계 모두 컨텐츠 (및 컨텐츠 사용)에 대한 판단을 할 수 있도록 이름에 일부 규칙을 사용하는 것이 도움이됩니다.

예를 들어 파일 이름 끝에 ".tmp"문자열을 사용하는 대신 임시 파일을 나타 내기 위해 파일 이름의 첫 문자로 쉼표를 사용하는 경우가 많습니다. 결과는 동일하며 짧은 시간 동안 만 필요한 데이터를 포함하는 파일이지만 이름에는 "."이 필요하지 않습니다. 그 안에 문자열 "tmp". 예를 들어 파일 이름 목록을 구문 분석 할 때 이점이있을 수 있습니다. 그러나 그것은 내 협약이며 다른 누군가는 ".tmp"를 임시 파일 이름의 규칙으로 사용하여 다른 사람을 결정할 수도 있습니다.

그래서 당신에게 대답하는 것은 유닉스 / 리눅스 파일 확장자는 다른 운영 체제와 파일 시스템에서 일반적으로 사용되는 파일 확장자처럼 보이는 일련의 규칙 일 뿐이라는 것입니다.


FWIW, 나는 또한 비표준 규칙을 사용합니다. 이름이 시작되는 내 스크립트 "."는 쉘에 의해 점으로 표시됩니다 (서브 쉘에서 의미있게 실행될 수 없음). 이에 따라 필자 ls는 "숨겨진"파일을 포함하여 모든 파일을 볼 수 있도록 사용하는 별칭 / 스크립트에서 기본 "초기 도트 = 숨겨진 파일"규칙을 비활성화합니다 . 마찬가지로 Windows에서도 "파일 확장자 숨기기"설정을 비활성화합니다.
jrw32982는 Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.