pushd
및 popd
의 실제 용도는 무엇입니까? cd
및 cd -
보다이 두 명령을 사용하는 것이 유리할 때?
편집 :이 두 명령에 대한 실제 사용 예 또는 디렉토리와 스택을 유지하는 이유 (탭 완성이있는 경우 cd -
, 단축을위한 별칭 cd ..
등).
답변
pushd
, popd
및 dirs
는 디렉토리 스택 을 조작 할 수 있습니다. 이는 디렉토리를 변경하는 데 사용할 수 있지만 원래 디렉토리로 돌아가는 데 사용할 수 있습니다.
예 :
다음 디렉터리로 시작 :
$ pwd /home/saml/somedir $ ls dir1 dir2 dir3
pushd에서 dir1로
$ pushd dir1 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir1 ~/somedir
dirs
명령은 현재 스택에 2 개의 디렉토리가 있음을 확인합니다. dir1
및 원본 디렉토리 인 somedir
. 참고 : ” 현재 ” 디렉토리는 ~/somedir/dir1
입니다.
pushd에서 ../ 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
p>
조금 혼란 스러울 수 있지만 stac의 머리는 k는 현재 사용자가있는 디렉토리입니다. 따라서 somedir
로 돌아 가면 dirs
에 다음이 표시되지만 :
$ dirs ~/somedir
실제로 스택이 비어 있습니다.
$ popd bash: popd: directory stack empty
댓글
- 감사합니다. 스택의 개념과이 명령의 작동 방식을 완전히 이해했습니다. 그러나 ‘ 디렉토리와 함께 스택을 유지하는 실용적인 이유를 찾고 있습니다 (탭 완성,
cd -
, 단축을위한 별칭이있는 경우). div id = “e670ea3339”> 등). -
pushd
&를 자주 사용합니다.popd
스크립트 b / c는 내가 어디에서 왔는지 기억하지 않아도됩니다. 언제든지popd
에서 돌아올 수 있습니다. 내가 온 곳. 나는 보통popd >/dev/null 2>&1
를 사용하여 조용히합니다. 나는 나의 쉘에서 매일 cd-를 사용한다. 이 도움말에는 다른 시간 절약 팁도 있습니다. thegeekstuff.com/2008/10/ … . - @Garrett-내가 생각할 수있는 것은 없습니다.
- @Garrett @slm 이후
cd -
는 마지막 디렉토리 만 추적합니다. 내부적으로 디렉토리를 변경하는 함수를 호출하면 문제가 발생할 수 있습니다. 이 경우 함수는 다시 팝업하려는 디렉토리가 아닌 현재 디렉토리로 재설정됩니다. pushd / popd는 가장 안전한 방법입니다. 참고 : ‘ 내 이론을 테스트하지 않았습니다. - 첫 번째
이후
~/somedir/dir3
로 돌아 가지 않는 이유 id = “9a953f50f0”>?
답변
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"
댓글
답변
디스 스택을 사용하는 간단한 사용 사례 중 하나는 cd만으로는 할 수없는 일입니다. :
pushd .
는 현재 디렉토리 XX를 dirs
스택에 추가합니다. 그런 다음 cd
를 사용하여 이동할 수 있으며 XX로 돌아가려면 “멀리”에 있는지에 관계없이 popd
를 수행하면됩니다. 디렉토리 트리 (여러 수준, 옆으로 건너 뛸 수 있음). bash 스크립트에서 특히 유용합니다.
댓글
- 이 기능이 제가 가장 자주 이용하는 기능이라고 생각합니다.
pushd
/popd
는cd
와 독립적으로 작동하므로보다 안정적인 북마크를cd -
보다. - 나에게는 사실이 아닙니다. cd를 사용할 때마다 스택이 변경됩니다.
- 오, zsh를 사용했기 때문에 bash로 변경하면 정상적으로 작동합니다.
- 비교에 관한 유일한 실질적인 대답입니다. cd-, IMO. foo를 눌렀는지 여부에 관하여; < 무작위 디렉토리 변경 >; popd는 a = foo보다 더 가치가 있습니다. cd $ a; < 무작위 디렉토리 변경 >; cd $ a … 스크립트의 경우 전자 (pushd)에서 작은 구문상의 편리함을 볼 수 있지만 후자 ([명시 적] 변수!)에서는 명확성이 크게 향상되었습니다. 대화 형 세션의 경우 처음에는 디렉토리 계층 구조가 제대로 구성되어 있다고 가정하고 길을 잃으면 cd ~ / back / to / obvious / path를 사용한다고 가정합니다.
- @HarendraSingh you don ‘
AUTO_PUSHD
가 설정되지 않았습니까?cd
가pushd
처럼 작동하게하고 설정을 해제하면 ‘ ” 정상적인 동작 “.
답변
pushd
및 popd
를 사용하면 스택의 디렉토리를 조작 할 수 있습니다.
디렉토리를 pushd
하면 현재 디렉토리를 스택에 넣고 디렉토리를 매개 변수로 지정된 디렉토리로 변경합니다.
popd
를 사용하면 스택의 디렉토리로 돌아갈 수 있습니다.
반복하면 디렉토리 순회가 일종의 보존되며 저장된 디렉토리의 역순으로 저장된 디렉토리로 돌아올 수 있습니다.
답변
bash 의 경우 기본적으로 : CD를 사용하는 대신 pushd
를 사용하여 디렉토리를 변경하십시오. 실제 사용 : 방문한 디렉토리의 기록이 저장되고 (올바르게 : 스택 됨) 디렉토리간에 전환 할 수 있습니다.
pushd /home; pushd /var; pushd log
스택을 보려면
및 더 쉬운 탐색을 위해 (” 스택 항목 수 ” 사용 :
dirs -v
출력 :
me@myhost:/home$ dirs -v 0 /home 1 /var 2 /tmp
이제 및 ~
는 다음과 같습니다.
cd ~1
하지만이 숫자는 지금 재 배열되어 ” 0 “가 변경되므로 pushd
디렉터리를 최상위 위치로 두 번 (또는 위치 0에 더미) :
me@myhost:/home$ dirs -v 0 /home 1 /home 2 /var 3 /tmp
이제 1..3이 위치를 유지합니다.
(현재 디렉토리를 스택 / 기록에서 삭제, popd
)
Answer
pushd / popd는 사람들이 이러한 명령을”디렉토리 스택을 조작 “하는 명령으로 정의하여 가르치는 경향이 있기 때문에 이해하는 데 시간이 걸리는 간단한 개념입니다. 제 생각에는 매우 혼란 스럽습니다.
다른 방식으로 봅니다.
pushd [folder_name] -[folder_name]으로 cd하고 문서 dir 스택에서 [folder_name] 인 대상을 최상위 디렉토리로 이동합니다. 스택의 현재 디렉토리는 항상 현재 디렉토리입니다.
popd -먼저 스택 맨 위에있는 디렉토리 레코드를 제거하고 문서를 제거합니다 (dir 스택에서 제거)
dirs -dir 스택을 인쇄합니다 (가장 왼쪽 항목이 현재 디렉토리 (스택 맨 위) 인 dir Db로 취급 될 수 있음)
따라서 가장 많이 사용되는 두 가지 사용 사례는 다음과 같습니다.
사용 사례 1 : pushd 및 popd를 사용한 탐색
root@mypc:/main/$ ls dir1 dir2 dir3 dir4 root@mypc:/main/$ dirs # prints the current stack /main root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now: /main/dir1 /main root@mypc:/main/dir1$ # I am now in /main/dir1 root@mypc:/main/dir1$ # Now let"s go wild and document whatever I want root@mypc:/main/dir1$ pushd ../dir2 root@mypc:/main/dir2$ # Woo I am in /main/dir2 root@mypc:/main/dir2$ pushd ../dir3 root@mypc:/main/dir3$ # Woo I am in /main/dir3 root@mypc:/main/dir3$ pushd ../dir4 root@mypc:/main/dir4$ # Woo I am in /main/dir4 root@mypc:/main/dir4$ dirs # Now dir stack is: /main/dir4 /main/dir3 /main/dir2 /main/dir1 /main
Let “s say 내가 문서화 한 폴더로 돌아가고 싶기 때문에 위의 작업을했습니다!
수동으로 cd하면 최상위 디렉토리 스택 항목 (항상 현재 디렉토리)에 영향을줍니다.
root@mypc:/main/dir4$ cd .. # Now dir stack is: # (note that /main appear in the leftmost as well which is the top of the stack) /main /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$
이제 뒤로 탐색 :
root@mypc:/main$ popd root@mypc:/main$ # Still in /main since it was at the top of the dir stack root@mypc:/main$ dirs # Stack is now: /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$ popd root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2 root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1 root@mypc:/main/dir1$ dirs # Stack is now: /main
다시 원하는 경로를 문서화 할 수 있습니다. 그런 다음 수동으로 다른 디렉토리로 이동하면 스택에 삽입 한 문서화 된 디렉토리로 쉽게 돌아갈 수 있습니다.
사용 사례 2 : 숫자 스택 인덱스를 사용하여 탐색
내가 pushd dir4 dir3 dir2 dir1을 사용하여 푸시했다고 가정하겠습니다. 이제 dir -v를 실행하면 다음이 표시됩니다.
root@mypc:/main$ dirs -v 0 /main/dir1 (this is the current dir you are in always) 1 /main/dir2 2 /main/dir3 3 /main/dir4
이제 스택 인덱스를 사용하여 디렉토리와 관련된 모든 Linux 작업을 수행 할 수 있습니다.
root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like: # cp /main/dir2/temp.txt /main/dir3/new_temp.txt
특정 항목을 삭제할 수도 있습니다. dir 스택의 항목 :
root@mypc:/main$ popd ~4
“documenting”이라는 단어를 사용하거나 일종의 Db가 단순화되므로 dir 스택에 대해 생각해보십시오. 개념!
답변
간단히 말하면 두 개 이상의 디렉토리 사이를 탐색해야 할 때 일반적으로 여러 번 & 앞으로, cd -
는 2 개 이상의 폴더로 잘라 내지 않습니다.
예를 들어, 버퍼의 히스토리를 보거나 긴 경로를 탭으로 완료하여 이전의 긴 경로를 다시 생성하려고하는 대신 중요한 경로를 단순히 쌓고 필요한 경우 번호만으로 편리하게 이동할 수 있습니다. 복잡한 디렉토리 구조와 긴 경로 사이의 회전은 매끄럽고 신속합니다.
내장 기능을 사용하면 스택을 재정렬하거나 더 이상 필요하지 않은 디렉토리를 표시하여 작업 흐름의 유연성을 높일 수 있습니다.
디렉토리 스태킹은 여러 디렉토리에 걸쳐있는 작업의 경우 스크립트에서도 유사하게 사용할 수 있습니다.
답변
I dirs / popd / pushd의 사용법이 약간 불편 함을 발견했습니다. .alias에 다음 코드를 추가하여 tcsh에서 개인 솔루션을 찾았습니다.
foreach b (. , - 0 1 2 3 4 5 6 7 8 9 ) alias p$b "set a=`pwd`; echo $a >! ~/.mydir"$b alias cd$b "cd "`cat ~/.mydir"$b"`"" alias del$b "rm -v ~/.mydir"$b alias home$b "set a="~"; echo $a >! ~/.mydir"$b end alias cdl "grep / ~/.mydir*"
예를 들어, “p.”라는 별칭을 지정하여 현재 작업 디렉토리를 ~ / .mydir. 파일에 저장하고 “cd.”를 지정하여 언제 어디서나 원하는 위치에 해당 디렉토리를 복구합니다. “del.”은 해당 파일을 제거합니다. “home.”은 dir을 home dir (cd; p.)로 설정하고 “cdl”은 저장된 디렉토리를 나열합니다. ~ / Dropbox / .mydir $ b (또는 다음과 같은 다른 클라우드 서비스를 사용하는 경우 예를 들어 ownCloud) ~ / .mydir $ b 대신 현명한 방법을 얻을 수 있습니다. 여러 계정과 컴퓨터에서 선호하는 디렉토리를 사용합니다.
답변
cd
및 cd -
를 사용하면 가장 최근에 사용한 두 디렉터리 사이를 전환 할 수 있습니다. “디렉토리 작업 세트”크기는 2입니다.
pushd
를 사용하면 작업 세트에 임의로 많은 수의 디렉토리를 유지할 수 있습니다.
cd
보다는 pushd
를 대부분 사용합니다. pushd directory_name
로 활성 디렉토리 스택을 구축 한 후에는 pushd ~#
를 사용하여 하루 종일 이들 사이를 이동할 수 있습니다.
pushd dir1 pushd ../dir2 pushd /full/path/to/dir3 # There are now three directories in the stack. pushd ~3 pushd ~2 # The same three directories are still on the stack, # just in a different order.
popd
는 거의 사용하지 않습니다. 완료되었음을 알 때 스택에서 디렉토리를 제거하려는 경우에만 사용합니다. 해당 디렉토리를 사용합니다.
디렉토리로 이동하여 스택에서 제거합니다.
popd ~2
현재 디렉토리에 머물면서 다른 디렉토리를 stack :
popd +2
여러 터미널 창 또는 탭을 여는 것과 유사한 작업 스타일로 끝납니다 (활동중인 각 디렉토리에 하나씩). 작동), 그러나 모두 하나의 터미널에서.이렇게하면 화면 공간이 절약되고 디렉토리 경로가 모두 하나의 쉘에서 사용 가능하므로 다음과 같은 작업을 수행 할 수 있습니다.
- 현재 작업중인 디렉토리간에 파일 복사
- 다른 디렉토리로 이동하지 않고 다른 디렉토리의 파일보기 또는 수정
예 :
cp ~2/myfile.txt ~4 less ~2/myfile.txt
tcsh
(bash
아님), 디렉토리 스택을 파일에 저장하고 나중에 복원 할 수도 있습니다.
저장 :
dirs -S ~/dirstack
복원 :
dirs -L ~/dirstack
그렇지 않으면 iv id = “bc4f8b844b를 바꾸십시오. tcsh
에서 사용하기위한 =
가있는 bash
예제의 “>
.
pushd =2 popd =4 popd +1
답변
내 bash_profile 및 .bashrc에서 이와 같이 사용하고 있습니다.
vi .bash_profile alias dirs="dirs -v" source d.sh :wq vi .bashrc alias dirs="dirs -v" :wq vi d.sh pushd ~/Documents/GIT/seiso-data pushd ~/Documents/GIT/ewe/EosRegistry pushd ~/Documents/GIT_LODGING/site-cookbooks pushd ~/Documents/CHEF_LODGING pushd . :wq
도움말 내 터미널에서 가장 최근에 사용한 디렉토리로 이동합니다. 🙂 pushd 대신 popd를 사용하는 데 도움이되기를 바랍니다. cd ~ stackednumber
div를 사용합니다. >
dirs -c