Programing

쉘 스크립트에서 'cd'를 실행하고 스크립트가 끝난 후에도 거기에 머무르는 방법?

lottogame 2020. 11. 18. 08:22
반응형

쉘 스크립트에서 'cd'를 실행하고 스크립트가 끝난 후에도 거기에 머무르는 방법?


쉘 스크립트 (bash)에서 '디렉토리 변경'을 사용했습니다.

#!/bin/bash
alias mycd='cd some_place'
mycd
pwd

pwdsome_place올바르게 인쇄 되지만 스크립트가 완료된 후 현재 작업 디렉토리가 변경되지 않습니다.

스크립트로 내 경로를 변경할 수 있습니까?


파일을 다음과 같이 소싱해야합니다.

. myfile.sh

또는

source myfile.sh

소싱하지 않으면 스크립트를 호출하는 부모 셸이 아닌 하위 셸에서 변경 사항이 발생합니다. 그러나 파일을 소싱하면 파일의 줄이 명령 줄에 입력 된 것처럼 실행됩니다.


스크립트는 별도의 서브 쉘에서 실행됩니다. 그 서브 쉘은 당신이 그것을 실행하는 쉘이 아니라 디렉토리를 변경합니다. 가능한 해결책은 source스크립트를 실행하는 대신 스크립트를 사용하는 것입니다 :

# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh

실행하려는 스크립트를 소싱하는 것이 하나의 솔루션이지만이 스크립트가 현재 셸의 환경을 직접 수정할 수 있다는 점을 알고 있어야합니다. 또한 더 이상 인수를 전달할 수 없습니다.

또 다른 방법은 bash에서 스크립트를 함수로 구현하는 것입니다.

function cdbm() {
    cd whereever_you_want_to_go
     echo arguments to the functions were $1, $2, ...
}

이 기술은 autojump ( http://github.com/joelthelion/autojump/wiki) 에서 사용하여 학습 쉘 디렉토리 책갈피를 제공합니다.


소싱을 통해 달성 할 수 있습니다. 소싱은 기본적으로 동일한 셸에서 스크립트를 실행하는 반면 일반 실행 ( sh test.sh또는 ./test.sh)은 하위 셸을 생성하고 거기에서 스크립트를 실행합니다.

test.sh

cd development/
ls
# Do whatever you want.

실행 test.sh하여

source test.sh

.에 대한 가장 짧은 표기법입니다 source. 그래서 당신은 또한 할 수 있습니다

. test.sh

그러면 스크립트가 실행되고 현재 쉘의 디렉토리가 development/.


로그인 셸에서 스크립트를 실행할 때마다 새 하위 프로세스가 생성되고 스크립트 실행이 하위 셸에서 수행됩니다. 스크립트가 완료되면 하위 셸이 종료되고 로그인 셸로 돌아갑니다. 스크립트, 디렉토리는 cd에 지정된 경로로 변경되지만 스크립트가 완료 될 때까지 로그인 쉘로 돌아와 스크립트를 시작한 작업 디렉토리로 돌아갑니다.

이것을 극복하는 방법은 사용입니다.

source yourscript.sh

소스가하는 일은 스크립트를 TCL 스크립트로 실행하는 것입니다. 즉, 로그인 쉘의 명령 줄에 각 줄을 입력하고 거기에서 실행했을 때와 동일한 효과가 있습니다. 따라서 스크립트가 cd 후 완료되면 해당 디렉토리에 유지됩니다.

참고 URL : https://stackoverflow.com/questions/3879431/how-to-run-cd-in-shell-script-and-stay-there-after-script-finishes

반응형