중복 가능성:
스크립트를 사용하여 현재 작업 디렉터리 변경
메인 셸/터미널의 작업 디렉터리를 변경하는 스크립트를 만들려고 합니다. 그렇게 할 수 없습니다. 나는 다음을 시도했다
파일 p1.sh
#!/bin/bash
cd /home/mtk/work/project1
파일코드.sh
#!/bin/bash
cd /home/mtk/templates/resusable/sampleCodes
하지만 위의 내용은 현재 실행 중인 자체적으로만 변경된다는 것을 알고 있습니다. 이 경우 p1.sh
OR code.sh
.
상위 호출 쉘의 현재 작업 디렉토리를 변경하는 방법을 알려주십시오.
예시 실행 및 기대사항:
$ pwd
/home/mtk
$ p1.sh
$ pwd
/home/mtk ### --> Expected /home/mtk/work/project1
노트
내 사용 사례는 다음과 같습니다. 일부 처리를 수행한 다음 프롬프트를 미리 정의된 디렉터리에 배치하고 싶습니다.
편집하다
왜 작동하지 않는지 알고 있습니다. 이 alias
상황에 대한 해결책인 것 같습니다. 하지만 내 질문을 확장하고 싶습니다.
상위 셸의 작업 디렉터리를 동적으로 변경하는 스크립트를 만들어야 합니다. 스크립트는 다음과 같이 말합니다 mycd.sh
. 여기에는 명령줄 매개변수 mycd.sh -c/-p1/-p2/
나 기타 사용자 정의 매개변수가 있습니다 .
Give은 -c
쉘 작업 디렉토리를 적절한 디렉토리로 전환합니다. 파일은 mycd.sh
다음과 같습니다
.. some processing
# parameter parsing
if [ $param1 -eq "c" ]; then
# change working dir of parent here
else
... other conditions
나는 쉘 작업 디렉토리를 변경하는 어떤 방법이 있을 것이라고 생각했습니다.
불분명한 점이 있으면 알려주시기 바랍니다.
답변1
사용별명이를 위해 예를 들어
alias p1='cd /home/mtk/work/project1'
alias code='cd /home/mtk/templates/resusable/sampleCodes'
이 줄을 쉘의 시작 스크립트에 넣어야 합니다(예: ) ~/.bashrc
.
또 다른 옵션은 다음을 사용하는 것입니다.쉘 기능. 이것은 약간 복잡합니다. 셸 함수는 별칭에 비해 몇 가지 장점이 있지만 이 경우에는 추가 기능이 필요하지 않습니다.
function p1 { cd /home/mtk/work/project1; }
function code { cd /home/mtk/templates/resusable/sampleCodes; }
답변2
실행 쉘에서 호출 쉘을 변경할 수 없습니다.
dircolors
예를 들어 다른 응용 프로그램은 스크립트를 cd
실행하는 대신 명령을 에코(또는 무엇이든)하도록 한 다음 호출 쉘에 호출을 래핑하도록 요청하는 일반적인 쉘 호출 방법을 따르는 것 같습니다.eval
스크립트에서 호출 셸을 설정하는 것 이상의 작업을 시도하고 실제로 수행할 작업을 알고 있는 호출자에게 의존하기 때문에 이는 아마도 귀하의 경우에는 작동하지 않을 것입니다.
예를 들어
#!/bin/bash
#somescript.sh
echo cd /some/path
그 다음에
eval `./somescript.sh`
또한 보안상의 이유로 약간 눈살을 찌푸립니다. ;o)