쉘 스크립트에서 'cd'를 실행하고 스크립트가 끝난 후에도 거기에 머무르는 방법?
쉘 스크립트 (bash)에서 '디렉토리 변경'을 사용했습니다.
#!/bin/bash
alias mycd='cd some_place'
mycd
pwd
pwd
some_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 후 완료되면 해당 디렉토리에 유지됩니다.
'Programing' 카테고리의 다른 글
"fork ()"후 printf 이상 (0) | 2020.11.18 |
---|---|
자바 스크립트로 팝업을 열고 사용자가 닫을 때 감지 할 수 있습니까? (0) | 2020.11.18 |
Maven없이 Eclipse Java 프로젝트에 대한 모든 JUnit 테스트를 동시에 실행하는 방법은 무엇입니까? (0) | 2020.11.18 |
원격 저장소에서 태그를 제거하는 방법 (0) | 2020.11.18 |
Hadoop에서 Amazon S3와 S3n의 차이점 (0) | 2020.11.18 |