현재 디렉토리 푸시 / 팝?


66

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

linux  bash 

답변:


91

이 pushd과popd

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.