푸시 및 팝 명령은 어떻게 사용합니까? 모두에 대한

무엇 모두의 실제 용도는 pushdpopd시기를이 두 명령을 사용하는 이점이있다 cd하고는 cd -?

편집 : 나는이 명령 모두에 대한 실제 사용 예를 찾고 있거나 디렉토리와 스택을 유지하는 이유 (탭 완성, cd -단축 별칭 cd ..등이있는 경우)를 찾고 있습니다 .



답변

pushd, popd디렉토리 스택dirs 을 조작 할 수있는 쉘 내장입니다 . 디렉토리를 변경하는 데 사용할 수 있지만 사용자가 온 디렉토리로 돌아갈 수 있습니다.

예를 들어

다음 디렉토리로 시작하십시오.

$ ls
dir1  dir2  dir3

dir1로 푸시

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

dirs명령은 스택에 2 개의 디렉토리가 있음을 확인합니다. dir1그리고 원래의 디렉토리, somedir.

../dir3으로 푸시되었습니다 ( dir1지금 내부에 있기 때문에 )

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

dirs스택에 3 개의 디렉토리가 있음을 보여줍니다. dir3, dir1somedir. 방향을 확인하십시오. 모든 새 디렉토리가 왼쪽에 추가됩니다. 디렉토리가 튀어 나오면 왼쪽에서 나옵니다.

디렉토리를 수동으로 변경 ../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

답변

에 정말 유용한 사용 사례 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

안전하게 탐색하려면 항상 다시 작성되므로 마지막 폴더를 두 번 추가해야합니다.

    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"

답변

dirs stack을 사용하는 간단한 유스 케이스는 cd로 할 수없는 일입니다.

pushd .현재 디렉토리 XX를 dirs스택에 추가합니다 . 나중에을 사용하여 이동할 수 있으며 cdXX로 돌아가려면 popd디렉토리 트리에서 얼마나 멀리 떨어져 있는지에 관계없이 수행 합니다 (여러 레벨, 옆으로 건너 뛸 수 있음). bash 스크립트에서 특히 유용합니다.


답변

pushd그리고 popd당신은 스택에 디렉토리를 조작 할 수 있습니다.

당신은 때 pushd디렉토리, 당신은 매개 변수로 지정된 하나에 스택 변경 디렉토리에 현재 디렉토리를 넣어.

popd 스택의 디렉토리로 돌아갈 수 있습니다.

반복하면 디렉토리 순회가 유지되며 저장된 디렉토리와 반대 순서로 저장된 디렉토리로 돌아갈 수 있습니다.


답변

에 대한 bash는 , 기본적으로 : 대신 CD를 사용하는 사용할 수 있습니다 pushd방문 디렉토리의 역사는 저장됩니다 실제 사용과, directorys를 변경하는 (정확하게 : 스택) 한 그들 사이를 전환 할 수 있습니다

pushd /home; pushd /var; pushd log

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)


답변

내가 찾은 실용적인 용도 중 하나는 pushd와 popd를 사용하여 디렉토리를 전환하는 것입니다.

dir1과 dir2라는 두 개의 디렉토리가 있고 xyz 이유로 연속적으로 전환해야한다고 가정 해보십시오.

현재 내가 두 디렉토리가 somedir에서 오전 dir1dir2:

alcohol@alcohol-machine:~/somedir$ ls
dir1  dir2
alcohol@alcohol-machine:~/somedir$ 

이제로 전환 dir1

alcohol@alcohol-machine:~/somedir$ cd dir1
alcohol@alcohol-machine:~/somedir/dir1$ pwd
/home/alcohol/somedir/dir1

이제 dir1스택에 추가 하고dir2

alcohol@alcohol-machine:~/somedir/dir1$ pushd /home/alcohol/somedir/dir2
~/somedir/dir2 ~/somedir/dir1
alcohol@alcohol-machine:~/somedir/dir2$

당신이 볼 수 있듯이, 지금이 dir2dir1스택에 난으로 현재입니다 dir2.

이제 다시로 전환하기 위해을 dir1실행하겠습니다 pushd || popd.

alcohol@alcohol-machine:~/somedir/dir2$ pushd || popd
~/somedir/dir1 ~/somedir/dir2
alcohol@alcohol-machine:~/somedir/dir1$ 

Voila, dir1에 있고 dir1과 dir2가 스택에 있습니다. dir2로 다시 전환하려면 다음을 실행하십시오.pushd || popd

alcohol@alcohol-machine:~/somedir/dir2$ pushd || popd
~/somedir/dir1 ~/somedir/dir2
alcohol@alcohol-machine:~/somedir/dir1$ 

이것은 디렉토리 간을 전환하는 간단한 방법입니다. 이제 디렉토리를 전환해야하는 이유는 무엇입니까? 하나의 유스 케이스는 웹 응용 프로그램에서 작업 할 때 하나의 디렉토리에 make 파일이 있고 다른 디렉토리에 로그 파일이 있다는 것입니다. 응용 프로그램을 디버깅 할 때 종종 로그 디렉토리 사이를 전환하여 최신 로그를 확인한 다음 make 디렉토리로 다시 전환하여 변경 사항을 적용하고 응용 프로그램을 빌드해야합니다.


답변

간단히 말해서 2 개 이상의 디렉토리 사이를 탐색해야 할 때, 보통 2 개 이상의 cd -폴더로 잘라 내지 않기 때문에 보통 몇 번 앞뒤로 탐색해야합니다 .

예를 들어, 버퍼의 히스토리를 보거나 긴 경로를 완료하여 이전의 긴 경로를 다시 시도하지 않고 중요한 경로를 쌓아 두는 것만으로 필요한 경우 숫자만으로 편리하게 이동할 수 있습니다. 복잡한 디렉토리 구조와 긴 경로 사이를 회전하는 것은 매끄럽고 빠릅니다.

내장 기능을 사용하면 스택 순서를 바꾸거나 더 이상 필요하지 않은 디렉토리를 튀어 나와 작업 흐름에 유연성을 부여 할 수 있습니다.

디렉토리 스태킹은 여러 디렉토리에 걸친 작업을 위해 스크립트에서 유사하게 사용될 수 있습니다.