bash를 사용하면 현재 작업 디렉토리를 푸시하고 팝하는 방법이 있습니까? 글을 쓰려고 bash;cd dir; ./dostuff;exit;
했지만 현재 디렉토리는 현재 dir
입니다.
답변
이 pushd
과popd
Bash는 방문한 디렉토리의 이력을 유지하므로 요청하면됩니다. Bash는 기록을 스택에 저장하고 푸시 및 팝 명령을 사용하여 스택을 관리합니다.
예:
$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
답변
호출 bash
하면 자체 입력이있는 새로운 서브 쉘이 시작됩니다. 다른 명령은 종료 될 때까지 실행되지 않습니다. parens로 실행할 명령을 둘러싸면 새 서브 쉘이 시작되지만 그 안에 명령이 실행됩니다.
( cd dir ; ./dostuff )
답변
여러 레벨의 디렉토리 히스토리가 필요하지 않은 경우 다음을 수행 할 수도 있습니다.
cd foo
# do your stuff in foo
cd -
pushd
/ 와 비교할 때 popd
, cd foo
실패 할 경우을 사용하여 잘못된 디렉토리에있게 된다는 단점이 있습니다 cd -
.
(아마도 cd -
스크립트 외부에서 더 편리 할 것 입니다. “내가 방금 돌아간 곳으로가 봅시다.”)
답변
‘cd.’를 사용하던 곳으로 돌아가거나 ‘cd ..’등을 사용하여 두 곳으로 돌아갈 수 있도록 디렉토리 변경 사항을 추적하기 위해 별칭을 사용합니다.
alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'