답변:
실행 불가능한 sh
스크립트 를 실행하려면 다음을 사용하십시오.
sh myscript
실행 불가능한 bash
스크립트 를 실행하려면 다음을 사용하십시오.
bash myscript
실행 파일 (실행 권한이있는 파일)을 시작합니다. 경로로 지정하면됩니다.
/foo/bar
/bin/bar
./bar
스크립트를 실행 가능하게하려면 필요한 권한을 부여하십시오.
chmod +x bar
./bar
파일이 실행 가능한 경우, 커널 은 파일을 실행 하는 방법을 알아낼 책임이 있습니다. 이진이 아닌 경우 파일의 첫 번째 줄을 보면됩니다. 포함해야합니다 hashbang
:
#! /usr/bin/env bash
hashbang은 커널에게 실행할 프로그램을 알려줍니다 (이 경우 명령 /usr/bin/env
은 인수와 함께 실행됩니다 bash
). 그런 다음 스크립트는 스크립트에 제공 한 모든 인수와 함께 후속 인수로 프로그램에 두 번째 인수로 전달됩니다.
즉, 실행 가능한 모든 스크립트에는 hashbang이 있어야합니다 . 그렇지 않은 경우, 당신은 어떤 커널 이야기하지 않을 입니다 , 따라서 커널은 그것을 interprete하는 데 사용하는 어떤 프로그램이 알 수 없습니다. 그것은 수 bash
, perl
, python
, sh
, 다른 또는 뭔가. (실제로 커널은 종종 사용자의 기본 쉘을 사용하여 파일을 해석합니다. 파일이 올바른 해석기가 아니거나 일부를 구문 분석 할 수는 있지만 다음과 같이 미묘한 동작 차이가 있기 때문에 매우 위험합니다 sh
와 bash
) 사이의 경우
/usr/bin/env
가장 일반적으로 다음과 같이 해시 뱅이 나타납니다.
#!/bin/bash
결과는 커널 프로그램을 실행하는 것입니다 /bin/bash
스크립트를 해석 할 수 있습니다. 불행히도 bash
항상 기본적으로 제공되는 것은 아니며 항상에서 사용할 수있는 것은 아닙니다 /bin
. Linux 시스템에는 일반적 bash
으로 /usr/xpg/bin/bash
또는 다른 여러 위치에 배송되는 다른 POSIX 시스템이 /usr/local/bin/bash
있습니다.
이식 가능한 bash 스크립트를 작성하기 위해 bash
프로그램 의 위치를 하드 코딩하지 않아도 됩니다. POSIX에는 이미 다음과 같은 처리 메커니즘이 PATH
있습니다. 아이디어는 디렉토리에있는 디렉토리 중 하나에 프로그램을 설치 PATH
하고 시스템은 프로그램을 이름으로 실행하려고 할 때 프로그램을 찾을 수 있어야한다는 것입니다.
슬프게도, 당신 은 이것을 할 수 없습니다 :
#!bash
커널은 PATH
당신을 검색 하지 않을 것입니다. PATH
하지만 당신을 검색 할 수있는 프로그램이 있습니다 env
. 다행히, 거의 모든 시스템은이 env
설치 프로그램을 /usr/bin
. 우리는 시작 그래서 env
다음 않는 하드 코딩 된 경로를 사용하여 PATH
검색을 bash
하고 스크립트를 해석 할 수 있도록 실행을 :
#!/usr/bin/env bash
POSIX에 따르면 hashbang은 하나의 인수를 가질 수 있습니다 . 이 경우 프로그램 bash
의 인수로 사용합니다 env
. 즉,에 인수를 전달할 공간이 없습니다 bash
. 따라서이 #!/bin/bash -exu
체계 와 같은 것을 변환 할 수있는 방법이 없습니다 . set -exu
대신 해시 뱅 을 배치 해야합니다.
이 방법에는 또 다른 장점이 있습니다. 일부 시스템에는이 포함 /bin/bash
되어 있지만 사용자가 좋아하지 않거나 버그가 있거나 구식이거나 bash
다른 곳에 설치했을 수 있습니다 . Apple이 오래된 제품을 출하 /bin/bash
하고 사용자가 /usr/local/bin/bash
Homebrew와 같은 것을 사용하여 최신 버전을 설치하는 OS X (Mac)의 경우가 종종 있습니다. 검색 env
을 수행하는 접근 방식을 사용하는 PATH
경우 사용자의 환경 설정을 고려하고 시스템과 함께 제공된 것보다 선호하는 bash를 사용합니다.
zsh
내 껍질로, 나는을 사용 hashbang
#! /usr/bin/env zsh
?
#! /usr/bin/env zsh
코드 가 Z 쉘에 의해 실행 되어야하는 경우 if 를 사용해야합니다 .
본 쉘의 경우 :
sh myscript.sh
bash의 경우 :
bash myscript.sh
스크립트를 현재 쉘에서 실행하려면 (예 : 디렉토리 또는 환경에 영향을 줄 수 있도록) 다음과 같이 말해야합니다.
. /path/to/script.sh
또는
source /path/to/script.sh
참고 /path/to/script.sh
예를 들어, 상대가 될 수는 . bin/script.sh
를 실행 script.sh
에 bin
현재 디렉토리 아래의 디렉토리.