자식 셸에서의 변수 및 별칭 상속 테스트
이 단계에서는 현재 셸에서 새로운 셸을 시작할 때 변수와 별칭이 어떻게 동작하는지 살펴봅니다. 이 새로운 셸을 "자식 셸 (Child Shell)"이라고 하며, 원래의 셸을 "부모 셸 (Parent Shell)"이라고 부릅니다. 이 개념은 셸 환경이 어떻게 구성되고 스크립트가 어떻게 실행되는지 이해하는 데 매우 중요합니다. 이전 단계에서 만든 flower와 nut 변수가 자식 셸로 전달 (상속) 되는지 테스트해 보겠습니다.
먼저 현재 부모 셸의 프로세스 ID(PID) 를 확인합니다. 리눅스의 모든 프로세스는 고유한 PID 를 가집니다. echo $$ 명령어로 확인할 수 있습니다.
echo $$
출력되는 숫자가 현재 셸의 PID 입니다. 예시는 다음과 같습니다.
123
이제 zsh를 입력하고 엔터를 눌러 자식 셸을 시작합니다. 이는 현재 프로세스 내부에서 새로운 셸 프로세스를 생성합니다.
zsh
이제 새로운 셸 세션에 들어왔습니다. 이를 확인하기 위해 부모 프로세스 ID(PPID) 를 포함한 상세 프로세스 정보를 보여주는 ps -f 명령어를 사용합니다.
ps -f
출력을 살펴보세요. 두 개의 zsh 프로세스가 보일 것입니다. 새로운 zsh 프로세스의 PID 는 앞서 확인한 부모 셸의 PID 와 일치하는 PPID 를 가지고 있어야 합니다.
UID PID PPID C STIME TTY TIME CMD
labex 123 1 0 10:00 pts/0 00:00:00 zsh
labex 456 123 0 10:01 pts/0 00:00:00 zsh
labex 457 456 0 10:01 pts/0 00:00:00 ps -f
이 예시에서 새로운 셸 (PID 456) 은 원래 셸 (PPID 123) 의 자식입니다.
이제 변수를 테스트해 봅시다. 이 자식 셸에서 로컬 변수 flower의 값을 표시해 봅니다.
echo $flower
아무것도 출력되지 않습니다. 로컬 변수는 생성된 셸 내에만 갇혀 있으며 자식 셸로 상속되지 않기 때문입니다.
다음으로 환경 변수 nut을 확인합니다.
echo $nut
이번에는 셸이 변수 값을 출력합니다.
almond
이는 로컬 변수와 달리 환경 변수는 자식 셸로 상속된다는 것을 보여줍니다.
이제 exit 명령어를 사용하여 부모 셸로 돌아갑니다.
exit
다시 원래의 셸로 돌아왔습니다. 별칭 (Alias) 으로 비슷한 테스트를 진행해 보겠습니다. 별칭은 명령어의 단축어입니다. ls -ld /etc를 실행하는 ldetc라는 별칭을 만듭니다.
alias ldetc='ls -ld /etc'
alias 명령어를 입력하여 별칭이 생성되었는지 확인합니다.
alias ldetc
정의된 별칭이 표시되어야 합니다.
ldetc='ls -ld /etc'
이제 별칭을 실행하여 테스트해 봅니다.
ldetc
명령어가 ls -ld /etc를 실행하고 /etc 디렉토리의 상세 정보를 보여줍니다.
drwxr-xr-x 1 root root 4096 Oct 10 10:00 /etc
이제 다시 자식 셸을 열어 별칭이 상속되는지 확인합니다.
zsh
새로운 자식 셸 내부에서 ldetc 별칭을 사용해 봅니다.
ldetc
오류 메시지가 나타납니다. 별칭 역시 로컬 변수와 마찬가지로 자식 셸에 상속되지 않기 때문입니다.
zsh: command not found: ldetc
부모 셸로 돌아갑니다.
exit
마지막으로 unalias 명령어를 사용하여 부모 셸에서 별칭을 제거하여 정리합니다.
unalias ldetc
다시 조회하여 제거되었는지 확인합니다.
alias ldetc
아무것도 반환되지 않습니다.
이 연습을 통해 셸 동작의 핵심 원칙을 배웠습니다. 환경 변수는 자식 프로세스에 상속되지만, 로컬 변수와 별칭은 상속되지 않습니다.