[Shell Script] 디렉터리 이동 후 간단히 원래 장소 이동

 디렉터리 이동 후 간단히 원래 장소 이동 



스크립트 안에서 cd 명령어로 다른 디렉터리로 이동하고 나서 원래 디렉터리로 간단히 돌아가고 싶을 때 이용합니다 . 

#!/bin/sh

# 괄호 안은 서브셸이 되므로 디렉터리 이동은 이 안에서만 유효 .  #1
(
    echo "Archive: /var/tmp/archive.tar"
    cd /var/tmp
    tar cvf archive.tar *.txt

)

# 스크립트 실행은 현재 디렉터리에서 처리
echo "Start: command.sh"
./command.sh


이 스크립트는 /var/tmp로 현재 디렉터리를 이동해서 그 안에 있는 확장자가 txt 인 파일을 archive.tar로 압축 후 원래 디렉터리로 돌아와 command.sh를 실행합니다 . 

command.sh 예제 
#!/bin/sh

echo "Good!!"


셸 스크립트는 cd 명령 후 작업용 디렉터리로 이동하기도 합니다. 
처리가 끝나서 원래 디렉터리로 돌아가려면 처음에 자신이 있던 디렉터리 명을 저장해 두어야 합니다 . 
하지만 원래 있던 곳을 저장 하지 않아도 간단한 방법으로 원래 디렉터리로 돌아갈 수 있습니다 . 
바로 스크립트에서 서브셸을 사용하는 것 입니다.

#1은 서브셸 표기로 괄호로 둘러싼 부분이 서브셸로 실행됩니다 . 
서브셸은 현재 셸 안에서 새롭게 실행되는 셸입니다 . 

서브 셸을 부른 곳의 환경 설정은 서브셸에 이어지지만 서브셸 내부에서 일어나는 변경은 호출한 원래의 셸에 영향을 주지 않습니다 . 

따라서 서브셸에서 현재 디렉터리를 변경하거나 변숫값을 변경해도 원래셸의 현재 디렉터리나 변숫값은 변하지 않습니다 . 
이런 관계를 "부모와 자식 관계" 라고 유닉스 시스템에서 부릅니다 . 
즉 , 서브셸은 자식 , 호출한 곳은 부모 프로세스가 됩니다. 

결과