스크립트를 사용하여 호출 셸의 작업 디렉터리를 어떻게 변경할 수 있나요? [복사]

스크립트를 사용하여 호출 셸의 작업 디렉터리를 어떻게 변경할 수 있나요? [복사]

중복 가능성:
스크립트를 사용하여 현재 작업 디렉터리 변경

메인 셸/터미널의 작업 디렉터리를 변경하는 스크립트를 만들려고 합니다. 그렇게 할 수 없습니다. 나는 다음을 시도했다

파일 p1.sh

#!/bin/bash
cd /home/mtk/work/project1

파일코드.sh

#!/bin/bash
cd /home/mtk/templates/resusable/sampleCodes

하지만 위의 내용은 현재 실행 중인 자체적으로만 변경된다는 것을 알고 있습니다. 이 경우 p1.shOR 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)

관련 정보