현재 디렉토리 푸시 / 팝?


66

bash를 사용하면 현재 작업 디렉토리를 푸시하고 팝하는 방법이 있습니까? 글을 쓰려고 bash;cd dir; ./dostuff;exit;했지만 현재 디렉토리는 현재 dir입니다.

linux  bash 

답변:


91

pushdpopd

Bash는 방문한 디렉토리의 이력을 유지하므로 요청하면됩니다. Bash는 기록을 스택에 저장하고 푸시 및 팝 명령을 사용하여 스택을 관리합니다.

더 읽을 거리

예:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me

1
링크에서 발췌pushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.
마스터 치프

31

호출 bash하면 자체 입력이있는 새로운 서브 쉘이 시작됩니다. 다른 명령은 종료 될 때까지 실행되지 않습니다. parens로 실행할 명령을 둘러싸면 새 서브 쉘이 시작되지만 그 안에 명령이 실행됩니다.

( cd dir ; ./dostuff )

1
훌륭한! 의도가 다른 디렉토리에서 명령을 실행 한 다음 (예 : 종속성 업데이트) 현재 디렉토리로 돌아올 때 푸시 / 팝할 필요가 없습니다.
Dan Dascalescu

12

여러 레벨의 디렉토리 히스토리가 필요하지 않은 경우 다음을 수행 할 수도 있습니다.

cd foo
# do your stuff in foo
cd -

pushd/ 와 비교할 때 popd, cd foo실패 할 경우을 사용하여 잘못된 디렉토리에있게 된다는 단점이 있습니다 cd -.

(아마도 cd -스크립트 외부에서 더 편리 할 것 입니다. "내가 방금 돌아간 곳으로가 봅시다.")


4

'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'

1
이 코드의 기능을 자세히 설명 할 수 있습니까?
bwDraco

영리 해요 나는 내 주위에 별칭을 가지고 있으며 내가 좋아하는 일을하기 위해 튀어 나왔습니다. 나는 항상 디렉토리 스택을 사용합니다. 나는 사람들이 CD를 어딘가에서보고 뒤로 잘라서 붙여 넣을 이전 디렉토리를 찾는 것을 싫어합니다. 할당량 때문에 홈 디렉토리에서 대부분의 작업을 수행 할 수 없으므로 네트워크에서 풀링 된 저장소를 사용해야합니다.
Michael Mathews

1
별칭이 ..cd충분합니까? 스택에서 마지막 10 개 항목 만 제거하는 것 같습니다.
reynoldsnlp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.