스크립트에서 현재 디렉토리를 변경할 수 있습니까?
Bash에서 디렉토리 탐색을위한 유틸리티를 만들고 싶습니다. 다음과 같은 테스트 스크립트를 작성했습니다.
#!/bin/bash
cd /home/artemb
Bash 쉘에서 스크립트를 실행할 때 현재 디렉토리는 변경되지 않습니다. 스크립트에서 현재 쉘 디렉토리를 변경할 수 있습니까?
답변
스크립트를 쉘 함수로 변환해야합니다.
#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
# . ~/bin/myprog.sh
#
function myprog() {
A=$1
B=$2
echo "aaa ${A} bbb ${B} ccc"
cd /proc
}
그 이유는 각 프로세스마다 고유 한 현재 디렉토리가 있고 쉘에서 프로그램을 실행할 때 새 프로세스에서 실행되기 때문입니다. 표준 “cd”, “pushd”및 “popd”는 쉘 인터프리터에 내장되어있어 쉘 프로세스에 영향을줍니다.
프로그램을 쉘 기능으로 만들어서 자체적 인 in-process 명령을 추가하면 디렉토리 변경 사항이 쉘 프로세스에 반영됩니다.
답변
스크립트를 시작하면 환경 만 상속하는 새 프로세스가 작성됩니다. 끝나면 끝납니다. 현재 환경은 그대로 유지됩니다.
대신 다음과 같이 스크립트를 시작할 수 있습니다.
. myscript.sh
는 .
이 변경 될 수 있으므로, 현재의 환경에서 스크립트를 평가합니다
답변
답을 읽을 수없고 너무 복잡하기 때문에 이것이 요청자가해야 할 일이라고 생각합니다
- 해당 스크립트를
PATH
- 스크립트를 다음과 같이 실행하십시오.
. scriptname
.
(점) 확인 스크립트가 자식 쉘에서 실행되지 않습니다 만들 것입니다.
답변
위의 내용을 정리하면 별칭을 만들 수 있습니다
alias your_cmd=". your_cmd"
선행 “.”을 쓰지 않으려면 스크립트를 쉘 환경에 소스를 제공하거나 스크립트가 올바르게 작동하기 위해 수행해야하는 것을 기억하고 싶지 않을 때마다.
답변
bash를 사용하는 경우 별칭을 시도 할 수 있습니다.
.bashrc 파일에 다음 줄을 추가하십시오.
alias p='cd /home/serdar/my_new_folder/path/'
명령 행에 “p”를 쓰면 디렉토리가 변경됩니다.
답변
bash 스크립트를 실행하면 현재 환경이나 자식 환경에서 작동하며 부모 환경에서는 작동하지 않습니다.
목표가 명령을 실행하는 것이라면 : goto.sh / home / test 그런 다음 / home / test에서 대화식으로 작업하는 방법 중 하나는 스크립트 내에서 bash 대화식 서브 쉘을 실행하는 것입니다.
#!/bin/bash
cd $1
exec bash
이렇게하면이 쉘의 종료 (exit 또는 Ctrl + C)까지 / home / test에있게됩니다.
답변
로 PUSHD 현재 디렉토리는 디렉토리 스택에 밀어 그것은 주어진 디렉토리로 변경됩니다, POPD 스택의 상단에있는 디렉토리를 얻고 그것을 다음 변경합니다.
pushd ../new/dir > /dev/null
# do something in ../new/dir
popd > /dev/null