[linux] bash 스크립트를 단독으로 실행 가능하게 하는 방법

파일로 저장한 bash 스크립트는 bash 인터프리터로 스크립트 파일을 호출하는 방식으로 실행합니다.

텍스트 메시지를 출력하는 bash 스크립트를 하나 만듭니다.

$ cat script.sh
echo 'bash script run!'
exit
$

bash 쉘 스크립트는 bash 인터프리터로 인터프리팅을 해서 실행합니다.

$ bash script.sh

bash 바이너리 위치는 which 커맨드로 확인할 수 있습니다. 우분투는 /usr/bin/bash에 있습니다. 경로는 알아둘 필요가 있습니다.

$ which bash
/usr/bin/bash

bash 스크립트는 텍스트 파일이기 때문에 셸 스크립트 파일이름을 콘솔에 입력하면 "command not found" 메시지가 표시됩니다. 그냥은 실행할 수 없습니다.

$ script.sh
script.sh: command not found

bash 셸 스크립트를 실행가능하게 하기

먼저 bash 셸 스크립트 파일에 실행 권한을 부여합니다.

chmod +x script.sh

실행 권한을 부여했으므로 실행이 가능할 것 같지만 여전히 "command not found" 가 출력됩니다. 콘솔에 커맨드를 입력하면 셸은 이 명령어가 실행 가능한 명령어인지 검색을 합니다.

셸에 등록된 경로 환경 값인 PATH 경로에서 해당 커맨드와 일치하는 실행 파일을 찾지 못하면 에러가 표시됩니다. script.sh 파일이 있는 현재 경로인 내 홈 경로는 셸에 PATH로 등록되어 있지 않기 때문에 실행 커맨드인 "script.js" 커맨드를 현재 경로에서는 찾지 않습니다.

따라서 현재 경로에서 실행 가능한 커맨드를 실행하려면 script.sh 앞에 "./"를 붙여서 현재 경로인 내 홈에 있는 실행 가능한 바이너리라고 명시해야 합니다.

$ ./script.sh
bash script run!
$

좋지 않은 방법이지만 bash 바이너리가 있는 경로인 "/usr/bin/" 안에 script.sh 파일을 만들고 실행 권한을 부여하면 현재 경로 표시("./)를 하지 않아도 "script.sh"가 실행됩니다.

실행 커맨드로 실행하고 싶은 bash 스크립트를 내 홈 루트나 내 홈 루트 하위 디렉토리에 따로 모아서 실행 커맨드로 사용하고 싶으면 PATH에 bash 스크립트가 위치한 경로를 추가하면 됩니다.

export PATH="$HOME:$PATH"

우분투 bash 셸은 내 홈 루트의 /bin 디렉토리가 기본 PATH로 포함되어 있습니다. 따라서 내 홈 루트에 bin 디렉토리를 만든 후, 내가 사용할 스크립트 파일들을 여기에 저장한 후 스크립트 파일에 실행 권한을 주면 별다른 설정 없이 bash 스크립트를 실행할 수 있습니다.

bash 셸의 PATH 환경 변수 설정은 내 홈루트의 ".profile" 파일을 열어서 PATH 환경 경로 값에 필요한 경로를 추가해주면 됩니다.