- 출처 : 네이버 지식인 -
로그인쉘에서 실행 : source ./test.sh
서브쉘에서 실행 : sh ./test.sh
차이점은
서브쉘에서 실행된 내용이나 실행환경은 서브쉘이 종료되는 순간 없어지는데
로그인쉘에서 실행된 내용이나 실행환경은 로그아웃 할 때까지 없어지지 않는다는데에 있습니다.
두 가지 경우 실행시 발생하는 과정을 자세히 설명하면
sh ./test.sh 로 실행을 하면
현재 쉘 하위로 쉘(서브쉘)이 하나 더 뜹니다.
cp, cd, cp 명령이 실행됩니다.
cd 명령 때문에 현재 작업중인 디렉토리 위치가 변경되었습니다.
서브쉘이 종료하면 상위의 원래 쉘(로그인쉘)로 돌아가게 됩니다.
서브쉘이 종료되면 현재 디렉토리 위치 정보는 없어지고
서브쉘이 시작된 위치로 돌아가게 됩니다.
그렇기 때문에 sh ./test.sh 을 실행한 후에는 작업중인 디렉토리 위치가 변경되지 않습니다.
하지만,
source ./test.sh 을 할 경우에는
서브쉘에서 해당 스크립트가 동작하지 않고, 로그인쉘에서 동작하기 때문에
cd 명령에 따라 작업중인 디렉토리 위치가 변경되게 됩니다.
source 명령 뒤에 오는 스크립트 첫줄에는 #!/bin/bash 가 필요없습니다. (왜?)
* 현재 로그인쉘 확인하기
- echo $SHELL