Pushd 및 Popd 명령을 사용하는 방법은 무엇입니까?

Pushd 및 Popd 명령을 사용하는 방법은 무엇입니까?

둘 다의 실제 용도는 무엇입니까 pushd? 및 위에 이 두 명령을 사용하면 popd어떤 이점이 있습니까 ?cdcd -

편집하다cd -: 이 두 명령의 실제 사용 예나 디렉터리와 함께 스택을 유지해야 하는 이유(탭 완성, 단축 별칭 cd ..등이 있는 경우) 를 찾고 있습니다 .

답변1

pushd,popd, 그리고dirs조작할 수 있는 쉘 내장 함수입니다.디렉토리 스택. 디렉터리를 변경하는 데 사용할 수 있지만 원래 디렉터리로 돌아갑니다.

예를 들어

다음 디렉터리에서 시작합니다.

$ pwd
/home/saml/somedir
$ ls
dir1  dir2  dir3

dir1로 푸시

$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir

dirs이 명령은 이제 스택에 2개의 디렉터리가 있음을 확인합니다. dir1그리고 원래 디렉토리인 somedir. 노트:우리의 "현재" 디렉토리는 입니다 ~/somedir/dir1.

../dir3으로 푸시됨( dir1지금 그 안에 있으므로)

$ pushd ../dir3
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir3

dirs이제 디스플레이 스택에는 3개의 디렉터리가 있습니다. dir3, dir1, 그리고 somedir. 방향에 주의하세요. 각각의 새 디렉토리가 왼쪽에 추가됩니다. 디렉토리 팝업을 시작하면 왼쪽에서도 나타납니다.

수동으로 디렉토리를 다음으로 변경하십시오.../dir2

$ cd ../dir2
$ pwd
/home/saml/somedir/dir2
$ dirs
~/somedir/dir2 ~/somedir/dir1 ~/somedir

이제 목차 팝업을 시작해 보세요.

$ popd
~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir1

갑자기 로 돌아왔습니다 dir1.

다시 인기가...

$ popd
~/somedir    
$ pwd
/home/saml/somedir

우리는 우리가 시작한 곳으로 돌아왔습니다 somedir.

다소 혼란스러울 수 있지만 스택의 헤드는 현재 있는 디렉터리입니다. somedir따라서 다시 돌아가면 dirs다음이 표시됩니다.

$ dirs
~/somedir

우리 스택은 실제로 비어 있습니다.

$ popd
bash: popd: directory stack empty

답변2

가지다pushdpopd명령에 대한 매우 유용한 사용 사례여러 폴더를 동시에 처리하는 데 사용됩니다.

스택은 열거되어 있으므로 매우 쉽게 탐색할 수 있습니다. 이는 작업하는 동안 여러 작업 폴더를 사용할 수 있음을 의미합니다.

간단한 예는 아래를 참조하세요.


먼저 샘플 폴더 구조를 만들어 보겠습니다.

    user@vb:~$ mkdir navigate
    user@vb:~/navigate$ mkdir dir1
    user@vb:~/navigate$ mkdir dir2
    user@vb:~/navigate$ mkdir dir3

그런 다음 모든 폴더를 스택에 추가할 수 있습니다.

    user@vb:~/navigate$ pushd dir1/
    ~/navigate/dir1 ~/navigate
    user@vb:~/navigate/dir1$ pushd ../dir2/
    ~/navigate/dir2 ~/navigate/dir1 ~/navigate
    user@vb:~/navigate/dir2$ pushd ../dir3/
    ~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate

다음 방법으로 찾을 수 있습니다.

    user@vb:~/navigate/dir3$ dirs -v
     0  ~/navigate/dir3
     1  ~/navigate/dir2
     2  ~/navigate/dir1
     3  ~/navigate

안전한 탐색을 위해 마지막(0) 폴더는 항상 덮어쓰므로 두 번 추가해야 합니다.

    user@vb:~/navigate/dir3$ pushd .
    user@vb:~/navigate/dir3$ dirs -v
     0  ~/navigate/dir3
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate

이제 이러한 폴더로 이동하여 폴더의 별칭처럼 스택을 사용할 수 있습니다. 다음 부분은 설명이 필요하다고 생각합니다.

    user@vb:~/navigate/dir3$ cd ~4
    user@vb:~/navigate$ dirs -v
     0  ~/navigate
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate
    user@vb:~/navigate$ cd ~3
    user@vb:~/navigate/dir1$ dirs -v
     0  ~/navigate/dir1
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate
    user@vb:~/navigate/dir1$ touch text.txt
    user@vb:~/navigate/dir1$ cp text.txt ~2
    user@vb:~/navigate/dir1$ ls ~2
    text.txt
    user@vb:~/navigate/dir1$ dirs -v
     0  ~/navigate/dir1
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate

추가 팁에 대한 별칭을 만드는 것입니다 dirs -v.

예를 들어:

# In ~/.bashrc
alias dirs="dirs -v"

답변3

CD만으로는 불가능한 dirs 스택을 사용하는 간단한 사용 사례:

pushd .현재 디렉터리 XX를 dirs스택에 추가합니다. 그런 다음 디렉터리 트리에서 얼마나 "멀리" 있는지에 관계없이 ,를 사용하여 이동 cd하고 XX로 돌아갈 수 있습니다(여러 수준 건너뛰기, 옆으로 건너뛰기 등 가능). popd특히 bash 스크립트에 유용합니다.

답변4

~을 위한세게 때리다, 기본적으로: pushdcd가 아닌 cd를 사용하여 디렉토리를 변경할 수 있습니다. 실제 사용: 방문한 디렉토리(올바른: 누적)의 기록을 저장하고 디렉토리 간에 전환할 수 있습니다.

pushd /home; pushd /var; pushd /tmp

스택 사용량을 보고 dirs더 쉽게 탐색하려면("스택 항목" 수를 얻으려면 다음을 사용하십시오.)

dirs -v

산출:

me@myhost:/home$ dirs -v
 0  /home
 1  /var
 2  /tmp

이제 이 숫자를 cd및 와 유사하게 사용하십시오.~

cd ~1

그러나 이제 숫자가 다시 정렬되고 위치 "0"이 변경되므로 pushd다음과 같이 디렉터리를 맨 위 위치로 두 번 이동합니다(또는 위치 0에 더미를 사용).

me@myhost:/home$ dirs -v
 0  /home
 1  /home
 2  /var
 3  /tmp

이제 1..3은 자신의 위치를 ​​​​유지합니다

(스택에서 현재 디렉토리를 해제하거나 기록에서 제거하려면 를 사용하십시오 popd.)

관련 정보