bash shell 질문입니다.

nayana의 이미지

cd.sh 파일을 하나 만들었습니다.

     1 #!/bin/bash
      2 cd ~/

아주 간단합니다.
예전에 cshell에서 하면 되었던것 같은데...bash shell에서는 안되네요!
alias로 해도 되지만...^^
bash shell에서 내장 명령어를 어떻게 해야하나요?

nthroot의 이미지

#!/bin/bash
cd $HOME

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

nayana의 이미지

그렇게 해도 안되는데요^^;

Fe.head의 이미지

PATH 조정이 안돼서 그러는거 아날까요?

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

lacovnk의 이미지

저걸 실행해도 홈디렉토리로 이동하지 않는 것은 당연한 겁니다 :)

/$ cat ~/public_html/cd.sh
#!/bin/bash
cd $HOME
ls

/]$ sh ~/public_html/cd.sh
2004.jpg  Maildir  check.xls blabla..

/]$ ls ~
2004.jpg  Maildir  check.xls blabla..

새로운 쉘이 열리고 그 안에서 cd로 이동한 것이기 때문에...
대신 그 스크립트 안에서 ls를 해보면 이동해있죠 ㅎㅎ

sorcerer의 이미지

. cd.sh 하거나 source cd.sh 하셔야 이동합니다.

위에 다른 분이 말씀하셨듯, 그냥 실행하면 독자적인 쉘이 실행되어 그 안에서 노는 것이기 때문에 해당 스크립트가 종료하면 스크립트를 위해 떴던 쉘도 종료하게 되는 것입니다. 그러니 이동한 디렉토리는 실제 작업중인 쉘에는 반영되지 않습니다.

. 이나 source는 같은걸로 알고 있는데, 기능은 뒤에 인자로 준 것을 실행할 때 사용하는 쉘을 현재 작업중인 쉘로 하는것입니다. 그 결과로 종료까지 했던 내용이 현재 쉘에 반영되게 되지요.

자세한 내용은 man bash 의 source 부분을 참조하세요:)

SOrCErEr