[bash] Bash 파일 확장자 란 무엇입니까?

텍스트 편집기에서 bash 스크립트를 작성했습니다. bash 스크립트로 실행할 수 있도록 스크립트를 어떤 확장자로 저장해야합니까? 이론상 ssh 서버를 시작해야하는 스크립트를 만들었습니다. 클릭하면 스크립트를 실행하는 방법이 궁금합니다. OS X 10.9.5를 실행하고 있습니다.



답변

다른 답변에 동의하지 .sh않는 경우 쉘 스크립트에 대한 확장 을 사용하는 일반적인 규칙이 있지만 유용한 규칙은 아닙니다. 확장 프로그램을 전혀 사용하지 않는 것이 좋습니다. foo.sh이름 때문에 쉘 스크립트 라는 것을 알 수있는 장점 은 최소한이며 유연성을 잃고 비용을 지불합니다.

bash 스크립트를 실행 가능하게 만들려면 맨 위에 shebang 줄 이 있어야합니다 .

#!/bin/bash

chmod +x시스템이 실행 파일로 인식하도록 명령을 사용 하십시오. 그런 다음에 나열된 디렉토리 중 하나에 설치해야합니다 $PATH. 스크립트가 호출 foo되면 다음을 입력하여 쉘 프롬프트에서 실행할 수 있습니다 foo. 또는 현재 디렉터리에있는 경우 (임시 스크립트에 일반적으로 사용됨)을 입력 할 수 있습니다 ./foo.

쉘도 운영 체제도 파일 이름의 확장자 부분에주의를 기울이지 않습니다. 이름의 일부일뿐입니다. 그리고 특별한 확장을 제공 하지 않음 으로써이를 사용하는 모든 사람 (사용자 또는 다른 스크립트)이 쉘 스크립트 (sh, bash, csh 등)에 관계없이 어떻게 구현되었는지 신경 쓰지 않아도됩니다. , Perl, Python 또는 Awk 스크립트 또는 바이너리 실행 파일입니다. 이 시스템은 구현 방법을 모르거나 신경 쓰지 않고도 해석 된 스크립트 또는 바이너리 실행 파일을 호출 할 수 있도록 특별히 설계되었습니다.

UNIX와 유사한 시스템은 순전히 텍스트 명령 줄 인터페이스로 시작되었습니다. KDE 및 Gnome과 같은 GUI는 나중에 추가되었습니다. GUI 데스크탑 시스템에서는 일반적으로 프로그램을 참조하는 아이콘을 두 번 클릭하여 프로그램을 실행할 수 있습니다 (스크립트 또는 바이너리 실행 파일인지 여부). 일반적으로 이것은 프로그램이 인쇄 할 수있는 모든 출력을 버리고 명령 줄 인수를 전달할 수 없습니다. 쉘 프롬프트에서 실행하는 것보다 훨씬 덜 유연합니다. 그러나 일부 프로그램 (대부분 GUI 클라이언트)의 경우 더 편리 할 수 ​​있습니다.

쉘 스크립팅은 GUI가 아닌 명령 줄에서 가장 잘 학습합니다.

(일부 도구 파일 확장자에주의를 기울입니다. 예를 들어, 컴파일러는 일반적으로 코드가 작성되는 언어를 결정하기 위해 확장자를 사용합니다 : .cC 용, .cppC ++ 용 등.이 규칙은 실행 파일에는 적용되지 않습니다.)

UNIX (및 UNIX 계열 시스템)는 Windows가 아닙니다. MS Windows는 일반적으로 파일의 확장자를 사용하여 파일을 열거 나 실행하는 방법을 결정합니다. 바이너리 실행 파일에는 .exe확장자 가 있어야합니다 . Windows에 UNIX와 유사한 셸이 설치되어있는 경우 .sh확장을 셸 스크립트로 인식하도록 Windows를 구성 하고 셸을 사용하여 열 수 있습니다. Windows에는 #!규칙 이 없습니다 .


답변

확장이 필요하지 않습니다 (또는 임의의 확장을 선택할 수 있지만 .sh유용한 규칙입니다).

#!/bin/bash(첫 번째 줄은 execve (2) syscall에 의해 이해 됨)로 스크립트를 시작 해야하며 chmod u+x. 따라서 스크립트가 일부 파일에 $HOME/somedir/somescriptname.sh있는 경우 한 번 입력해야합니다.

 chmod u+x  $HOME/somedir/somescriptname.sh

터미널에서. 명령에 대해서는 chmod (1 ) 을, syscall에 대해서는 chmod (2) 를 참조하십시오.

당신은 전체 파일 경로를 입력하지 않는 한, 당신이 언급 한 일부 디렉토리에이 파일을 넣어야 당신 PATH(참조 와 환경 (7)execvp는 (3) ) 당신이 영구적으로 설정할 수 있습니다, ~/.bashrc사용자의 로그인 쉘 인 경우 bash)

BTW, 다른 언어로 스크립트를 작성할 수 있습니다. 예를 들어 Python에서으로 시작 #!/usr/bin/python하거나 Ocaml로 시작하여 #!/usr/bin/ocaml

두 번 클릭하여 스크립트를 실행하는 것은 데스크탑 환경 문제이며 데스크탑에 따라 다를 수 있습니다 (Kde, Mate, Gnome, …. 또는 IceWM 또는 RatPoison과 다를 수 있음). EWMH 사양을 읽는 것이 더 나은 그림을 얻는 데 도움이 될 수 있습니다.

스크립트를 실행 가능 chmod하게 만들면 데스크톱에서 클릭 할 수 있습니다 (분명히 MacOSX의 Quartz ). 하지만 시각적 인 피드백을 제공하도록해야 할 것입니다.

그리고 몇몇 컴퓨터에는 ssh 를 사용하여 원격으로 액세스 할 때 자신의 데스크톱을 포함하여 데스크톱이 없습니다 .

클릭하여 쉘 스크립트를 실행하는 것은 좋은 생각이 아니라고 생각합니다. 셸 스크립트에 인수를 제공 할 수 있기를 원할 것입니다 (그리고 클릭하면 어떻게 할 수 있습니까?). 출력에주의해야합니다. 쉘 스크립트를 작성할 수 있다면 터미널에서 대화 형 쉘을 사용할 수 있습니다. 스크립트를 사용하는 가장 좋고 가장 자연스러운 방법입니다. 좋은 대화 형 셸 (예 : zsh 또는 fish 또는 최근 bash)은 맛있고 구성 가능한 자동 완성 기능을 갖추고 있으며 많이 입력 할 필요가 없습니다 ( tab키보드 키 사용법 배우기 ). 또한 스크립트와 프로그램은 종종 복합 명령 (파이프 라인 등)의 일부입니다.

추신. 저는 1986 년부터 Unix를 사용하고 1993 년부터 Linux를 사용하고 있습니다. 클릭만으로 프로그램이나 스크립트를 시작한 적이 없습니다. 왜 그래야합니까?


답변

나는 이것이 지금 꽤 오래되었다는 것을 알고 있지만 이것이 질문이 요구하는 것에 추가되는 것 같습니다.

Mac에서 스크립트를 두 번 클릭하여 스크립트를 실행하려면 .command확장 프로그램 을 사용해야합니다 . 이전과 동일하게 chmod -x.

이전에 언급했듯이 이것은 실제로 그렇게 유용한 tbh가 아닙니다.


답변

그냥 .sh.

다음과 같이 스크립트를 실행하십시오.

./script.sh

편집 : anubhava가 말했듯이 확장은 실제로 중요하지 않습니다. 그러나 조직적인 이유로 확장 프로그램을 사용하는 것이 좋습니다.


답변

TL; DR-스크립트의 사용자 (반드시 개발자 일 필요는 없음)가 GUI 인터페이스를 사용하는 경우 사용중인 파일 브라우저에 따라 다릅니다. MacOS의 Finder는 .sh스크립트를 실행하기 위해 확장 이 필요합니다 . 그러나 Gnome Nautilus는 .sh확장자 가 있거나없는 스크립트를 제대로 인식 합니다.

bash 스크립트에서 확장을 사용하는 이유와 반대하는 이유가 이미 여러 번 언급되었지만 확장을 사용하지 않는 이유 또는 이유는 많지 않지만 경험상 좋은 규칙이라고 생각하는 것이 있습니다.

bash에 들어갔다 나오고 터미널을 일반적으로 사용하는 유형이거나 터미널을 사용하지 않는 다른 사람을위한 도구를 개발하는 경우 .shbash 스크립트에 확장을 추가하십시오. 이렇게하면 해당 스크립트의 사용자는 GUI 파일 브라우저에서 해당 파일을 두 번 클릭하여 스크립트를 실행할 수 있습니다.

주로 터미널에서 작업의 전부 또는 대부분을 수행하는 유형이라면 bash 스크립트에 확장 기능을 추가하지 마십시오. ~/.bashrc스크립트와 디렉토리를 시각적으로 구분 하기 위해 파일을 이미 설정했다고 가정하면 터미널에서 아무런 용도가 없습니다 .

편집하다:

Gnome Nautilus 파일 브라우저에서 4 개의 테스트 파일 (각각 파일을 실행할 권한이 부여됨)에서 터미널 창을 여는 어리석은 간단한 bash 명령을 사용합니다 ( gnome-terminal).

  1. #!/bin/bash첫 번째 줄에 확장자가없는 파일 .

    파일을 두 번 클릭하면 작동합니다.

  2. 첫 번째 줄에 .sh확장자가 있는 파일 #!/bin/bash.

    파일을 두 번 클릭하면 작동합니다.

  3. #!/bin/bash첫 번째 줄에 NO 확장자가있는 파일 .

    기술적으로 파일을 두 번 클릭하여 작동했지만 GUI는 그것이 쉘 스크립트라는 표시를주지 않았습니다. 그것은 단지 평문 파일이라고 말했다.

  4. 첫 번째 줄에 .sh확장명이 NO 인 파일 #!/bin/bash.

    파일을 두 번 클릭하면 작동합니다.

그러나 Keith Thompson 이이 답변의 의견에서 현명하게 지적했듯이 .sh파일의 첫 번째 줄 ( #!/bin/bash) 에서 bash shebang 대신 확장을 사용 하면 문제가 발생할 수 있습니다.

그러나 이전에 MacOS를 사용하고 있었을 때 .sh확장명이없는 bash 스크립트도 MacOS의 GUI에서 실행할 수 없다는 것을 기억합니다. 나는 누군가가 코멘트에서 나를 수정하기를 원합니다. 이것이 사실이라면 .sh확장이 중요한 곳에 적어도 하나의 파일 브라우저가 있다는 것을 증명할 것입니다 .


답변