Shell 스크립트 실행 방식과 하위 프로세스의 관계

Shell 스크립트를 실행하는 방법은 크게 네 가지로 나뉩니다. 각 방식은 현재 셸 환경에 미치는 영향이 다르므로 상황에 맞게 선택해야 합니다.

네 가지 실행 방식

  • bash ./script.sh
  • ./script.sh
  • source ./script.sh
  • . ./script.sh

실행 방식별 차이점

bash ./script.sh 방식은 현재 터미널에서 bash 하위 프로세스(subshell)를 생성하여 스크립트를 실행합니다. 따라서 현재 환경(예: 현재 디렉토리, 환경 변수)에 영향을 주지 않습니다.

[user@host ~]$ bash ./script.sh

./script.sh 방식은 스크립트 첫 줄에 선언된 shebang(#!/bin/bash 등)을 따라 해당 인터프리터의 하위 프로세스를 생성하여 실행합니다. 일반적으로 shebang이 bash라면 첫 번째 방식과 동일하게 동작합니다.

[user@host ~]$ ./script.sh

source ./script.sh. ./script.sh 방식은 현재 셸에서 직접 스크립트를 실행하므로 하위 프로세스를 생성하지 않습니다. 따라서 스크립트 내부의 변경사항(디렉토리 이동, 변수 할당 등)이 현재 셸 환경에 그대로 반영됩니다.

[user@host ~]$ source ./script.sh
[user@host ~]$ . ./script.sh

환경 영향 비교 실습

다음은 /tmp 디렉토리로 이동한 후 현재 경로를 출력하는 간단한 스크립트입니다.

#!/bin/bash
cd /tmp
pwd

방법 1: bash ./script.sh

스크립트에 실행 권한이 없어도 실행 가능합니다.

[user@host /]$ bash script.sh
/tmp
[user@host /]$ pwd
/

스크립트 종료 후에도 현재 디렉토리는 그대로 /입니다. 하위 프로세스에서만 /tmp로 이동했기 때문입니다.

방법 2: ./script.sh

먼저 실행 권한을 부여해야 합니다.

[user@host /]$ chmod u+x script.sh
[user@host /]$ ./script.sh
/tmp
[user@host /]$ pwd
/

결과는 방법 1과 동일하게 현재 환경에 영향을 주지 않습니다.

방법 3: source ./script.sh

[user@host /]$ source script.sh
/tmp
[user@host tmp]$ pwd
/tmp

현재 셸에서 직접 실행되었으므로 스크립트 종료 후에도 디렉토리가 /tmp로 변경된 상태가 유지됩니다.

방법 4: . ./script.sh

[user@host /]$ . ./script.sh
/tmp
[user@host tmp]$ pwd
/tmp

source의 단축형이며 동일한 결과를 보여줍니다.

핵심 정리

bash 또는 ./ 방식은 하위 프로세스(subshell)에서 스크립트를 실행하므로 현재 셸 환경에 영향을 주지 않습니다. 스크립트 종료 후 모든 변경사항은 사라집니다.

source 또는 . 방식은 현재 프로세스에서 스크립트를 실행하므로 디렉토리 변경, 변수 설정, 함수 정의 등이 현재 셸에 영구적으로 적용됩니다. 환경 설정 스크립트(.bashrc 등)를 적용할 때 주로 사용됩니다.

태그: Shell bash subshell Source 스크립트실행

5월 31일 18:09에 게시됨