무엇 모두의 실제 용도는 pushd
과 popd
시기를이 두 명령을 사용하는 이점이있다 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
, 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
답변
이 에 정말 유용한 사용 사례 pushd
및 popd
명령을 동시에 여러 폴더로 작업.
스택이 열거되어 있으므로 스택을 매우 쉽게 탐색 할 수 있습니다. 즉, 작업 중에 여러 작업 폴더를 사용할 수 있습니다.
아래의 간단한 예를 참조하십시오.
먼저 폴더 구조의 예를 만들어 봅시다.
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
스택에 추가합니다 . 나중에을 사용하여 이동할 수 있으며 cd
XX로 돌아가려면 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에서 오전 dir1
과 dir2
:
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$
당신이 볼 수 있듯이, 지금이 dir2
와 dir1
스택에 난으로 현재입니다 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 -
폴더로 잘라 내지 않기 때문에 보통 몇 번 앞뒤로 탐색해야합니다 .
예를 들어, 버퍼의 히스토리를 보거나 긴 경로를 완료하여 이전의 긴 경로를 다시 시도하지 않고 중요한 경로를 쌓아 두는 것만으로 필요한 경우 숫자만으로 편리하게 이동할 수 있습니다. 복잡한 디렉토리 구조와 긴 경로 사이를 회전하는 것은 매끄럽고 빠릅니다.
내장 기능을 사용하면 스택 순서를 바꾸거나 더 이상 필요하지 않은 디렉토리를 튀어 나와 작업 흐름에 유연성을 부여 할 수 있습니다.
디렉토리 스태킹은 여러 디렉토리에 걸친 작업을 위해 스크립트에서 유사하게 사용될 수 있습니다.