두 번 클릭하여 OS X에서 쉘 스크립트를 실행하는 방법은 무엇입니까?


233

OS X에서 사용자 실행 권한이있는 쉘 스크립트가 있지만 두 번 클릭하면 텍스트 편집기에서 열립니다. 두 번 클릭하여 실행하려면 어떻게해야합니까?

답변:


266
  • 터미널에서 먼저 다음을 입력하여 스크립트를 실행 가능하게 만드십시오.

    chmod a+x (yourscriptname)
  • 그런 다음 Finder에서 파일을 마우스 오른쪽 단추로 클릭하고 "다음으로 열기"를 선택한 다음 "기타 ..."를 선택하십시오.

  • 여기서 파일을 실행할 응용 프로그램을 선택합니다.이 경우에는 터미널이됩니다. 터미널을 선택하려면 "권장 응용 프로그램"에서 "모든 응용 프로그램"으로 전환해야합니다. (Terminal.app 응용 프로그램은 유틸리티 폴더에서 찾을 수 있습니다)

  • 터미널에서 실행되도록이 확장명을 가진 모든 파일을 연결하지 않으려면 "항상 연결 프로그램"을 선택하지 않아야합니다.

  • 확인을 클릭하면 스크립트를 두 번 클릭하여 스크립트를 실행할 수 있습니다.

감사합니다. 터미널에 연결할 줄 몰랐습니다. / bin / sh
c2h2

22
"유틸리티"폴더를 찾아야한다는 것을 알기 전까지는 목록에서 Terminal.app 를 찾을 수 없었 습니다. 잘하면 이것은 누군가를 구할 수 있기를 바랍니다.
Glenn Lawrence

27
OSX 10.8 이상에서 이름에 접미사 또는 접미사 가 없는 실행 스크립트 .command기본적으로 Finder가 여는 방법을 지시하지 않고 Finder에서 실행 파일입니다.
mklement0

1
"모든 응용 프로그램"은 내가 놓친 설정입니다. 아마도 Cheruvim이 경험 한 것입니다. Glenn의 의견에 관해서는 : 창의 오른쪽 상단에있는 내장 검색 기능을 사용하면됩니다. 앱의 전체 이름 (예 : Terminal.app)을 입력해야합니다.
장로

3
깨끗한 방법은 아닙니다. 스크립트를 .command파일 확장자 로 바꾸십시오 .
Bachsau

227

.command파일 이름 확장자를 사용해 보셨습니까 ?


3
이게 낫다. @Lus 답변에서 작업 폴더는 스크립트를 여는 것과 다릅니다.
Rodrigo

6
콘솔 창이없는 "백그라운드"작업을 시작하는 방법이 있습니까?
lapo

6
현재 디렉토리는 스크립트가있는 디렉토리가 아닐 수도 있습니다. stackoverflow.com/questions/59895/…
Pavel Alexeev

14
여전히 실행 권한 ( chmod +x) 이 필요 하지만 .command확장 프로그램은 이미 터미널과 연결되어 있습니다. 훌륭한 솔루션, 감사합니다
NorTicUs

분명히 사용자는 실수하지 않으면이 방법으로 터미널 프로그램과 상호 작용할 수 없습니다.
Demis

153

OSX 10.10 (Yosemite)부터 OS X 10.8 (Mountain Lion) 이상 부터 Finder에서 실행 스크립트열 (두 번 클릭) 하면 동작은 다음과 같습니다 .

  • 실행 스크립트 [1] 중 어느 하나와 NO 접미사 또는 접미어.command :
    • 되어 실행 기본적으로 - 어떤 설정이 필요하지 않습니다 :
      • 터미널 창은 스크립트가 실행되는 열립니다.
      • 기본적으로 스크립트가 종료 된 후에도 창은 열린 상태로 유지 되므로 출력을 검사 할 수 있습니다 (단, 스크립트를 실행 한 셸이 종료되어 더 이상 상호 작용할 수는 없음 ).
        그러나 터미널을 통해 스크립트가 종료 될 때 Preferences... > Profiles자동으로 창을 도록 선택할 수 있습니다 .
    • 주의 사항 : 작업 폴더 는 스크립트가있는 폴더가 아닌 현재 사용자의 홈 폴더 입니다.
      • 쉘 스크립트가있는 폴더를 쉘 스크립트로 변경하려면
        • cd -- "$(dirname "$BASH_SOURCE")" 셰방 라인 바로 다음
        • 또는 POSIX 호환 상태를 유지해야하는 경우 cd -- "$(dirname "$0")".
        • 심볼릭 링크 된 스크립트의 실제 소스 디렉토리 를 찾는 것과 같은 에지 사례 는 이 답변 을 참조하십시오 .
    • 스크립트가 예기치 않게 실행 가능 하지 않은 경우 :
      • chmod +x <script>터미널에서 실행하여 실행 가능하게하십시오 . 그렇지 않으면 다음과 같은 증상이 나타납니다.
      • .command: Finder는을 통해 문제를 해결할 수 있음을 나타내는 잘못된 오류 메시지를 표시합니다 File > Get Info. 이는 사실이 아닙니다 chmod +x. 위에서 제안한 방법을 사용하십시오 .
      • 접미사 없음 :
        • 오두막 라인 (예, #!/bin/bash) : 접미사가있는 것처럼 행동입니다 .sh- 아래를 참조하십시오.
        • shebang 줄 이 없는 경우 : 기본 텍스트 편집기 (기본적으로 TextEdit)에서 열립니다.
  • 실행 가능 여부에 관계없이 접미사가있는.sh 스크립트 :
    • 에서 편집 할 수 있도록 ( TextEdit.app또는 설치된 경우) 로 열립니다Xcode.app .
  • 접미사가있는.scpt 스크립트 또는 .applescript실행 가능한 것으로 표시되어 있어도 일반적으로 그렇지 않은 스크립트 :
    • 열어 편집[Apple]Script Editor
    • 있습니다 JXA 소스 코드 파일이 보인다는 뚜렷한 접미사 (아직)가 없습니다.
  • 실행 가능 여부에 관계없이 사용자 지정 접미사 (시스템에 알려지지 않은 접미사)있는 스크립트 (실제로 모든 종류의 파일에 적용) :
    • 프롬프트 그들을 열려면 앱 이 때 첫째 을 열고 , 그리고 그 선택을 기억 .

[1] 실행 파일 은 파일에 대한 소유권과 관련하여 실행 가능 권한 비트가 설정되고 호출하는 사용자가있는 스크립트이므로 잠재적으로이를 실행할 수 있음을 의미합니다. 모든 권한 비트 (일반적인) 를 설정
하는 chmod a+x데 사용 하는 경우 누구나 읽기 권한 비트와 파일 소유권 에 따라 파일 을 읽을 수 있다고 가정하면 누구나 권한 비트 를 호출 할 수 있습니다 .


1
스크립트가 종료 될 때 열린 터미널 창을 닫으면 프로파일을 수동으로 엉망으로 만드는 대신 파일에 osascript포함시킬 수 있습니다 .command.
l' L' l

@ I'L'I : osascript -e '...'스크립트 끝에 명령을 추가한다는 의미 입니까? 특정 명령은 무엇이며 스크립트가 맨 앞 탭에서 실행되고 있지 않더라도 오른쪽 탭이 닫히도록합니까?
mklement0

5
@ mklement0 : 예, 몇 분 이상 테스트하지는 않았지만 기본 아이디어는 .command 스크립트 의 마지막 줄에 포함시키는 것입니다 . osascript -e 'tell application "Terminal" to close front window' > /dev/null 2>&1 &... 모든 시나리오에서 작동하지는 않습니다. end는 실제로 핵심입니다. osascript를 쉽게 조정할 수 있습니다 (예 : 터미널 기본 동작 인 경우 으로 변경해야 할 수 있음 ).
l' L' l

.command프로파일 설정에도 불구하고 스크립트 파일이 실행 된 후 터미널 창 / 탭을 닫을 수 없습니까?
CyberMew

@CyberMew : 스크립트를 수정할 수 있으면 끝에 키 입력을 기다리는 명령을 추가하십시오. 예를 들어, bash스크립트 인 read -p 'Press Return to close this window.'경우 마지막 명령문으로 추가하십시오 .
mklement0

38

또는 Platypus를 사용하여 스크립트에서 일반 Mac OS X 응용 프로그램을 생성 할 수 있습니다


이것은 정말 좋은 응용 프로그램입니다. 하지만 여기에 문제가 있습니다. .app 파일로 변환하려는 Python 스크립트가 있습니다. 내 스크립트에는 사용자가 입력 (raw_input ())을 입력 해야하는 행이 포함되어 있습니다. .app 가이 코드 행에 도달하면 EOF (파일 끝) 오류가 발생합니다. 그것에 대해 무엇을 할 수 있습니까?

1
대화식 터미널이 아닙니다. 오리너구리는 단순히 스크립트 출력을 제공합니다. 양방향 통신이 없습니다.
svth

4
또는 Run Shell Script (쉘 스크립트 실행) 작업을 사용하여 Automator로 OS X 응용 프로그램을 만듭니다.
Rangi Keen

15

쉬운 방법은 확장명을 변경하거나 확장 .command하지 않는 것입니다.

그러나 터미널이 열리면 터미널을 닫아야합니다. 출력을 보지 않으려면 Automator를 사용하여 두 번 클릭하거나 도크에 추가하는 등의 Mac 응용 프로그램을 만들 수 있습니다.

  1. Automator응용 프로그램 열기
  2. "응용 프로그램"유형을 선택하십시오
  3. 조치 검색 상자에 "실행"을 입력하십시오.
  4. "쉘 스크립트 실행"을 두 번 클릭하십시오.
  5. Run오른쪽 상단에 있는 버튼을 클릭하여 테스트하십시오.
  6. File > Save 응용 프로그램을 만들 수 있습니다.

여기에 이미지 설명을 입력하십시오


대단해! 매일 오후 1시에 실행되도록이 워크 플로를 자동화하는 방법은 무엇입니까?
iAkshay

9

Platypus와 같은 타사 앱을 사용할 필요가 없습니다.

스크립트 편집기로 Apple Script를 생성하고 do shell script "shell commands"직접 명령 호출 또는 실행 가능한 쉘 스크립트 파일에 명령 을 사용 하고 편집 가능한 스크립트 파일을 안전한 곳에 보관 한 다음 내 보내어 응용 프로그램 스크립트를 생성하십시오. 응용 프로그램 스크립트는 두 번 클릭하거나 막대 폴더에서 선택하여 시작할 수 있습니다.


3
더 좋은 방법은 Apple Script를 거치지 않고 Automator를 사용하고 Run Shell Script 액션을 직접 사용하는 것입니다.
Rangi Keen

0

RCDefaultApp을 사용하여 파일 확장자별로 기본값을 설정할 수도 있습니다.

http://www.rubicode.com/Software/RCDefaultApp/

잠재적으로 .sh를 iTerm / Terminal 등에서 열도록 설정할 수 있습니다. 예를 들어 사용자 실행 권한이 필요합니다.

chmod u+x filename.sh

RCDefaultApp 준비 창


0

chmod 774 filename

참고 : bash 스크립트를 가진 이름이 'filename'인 파일은 확장자가 없습니다.

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