답변:
pushd
, popd
및 디렉토리 스택dirs
을 조작 할 수있는 쉘 내장입니다 . 디렉토리를 변경하는 데 사용할 수 있지만 사용자가 온 디렉토리로 돌아갈 수 있습니다.
$ ls
dir1 dir2 dir3
$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir
dirs
명령은 스택에 2 개의 디렉토리가 있음을 확인합니다. dir1
그리고 원래의 디렉토리, somedir
.
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
그들은 내가에서 오는 된 위치를 기억 할 필요가 저를 저장 / c를 스크립트에서, 나는 언제나 할 수 b를 popd
다시 내가 온 곳에서 얻을 수 있습니다. 나는 보통 popd >/dev/null 2>&1
침묵을 유지합니다. 나는 매일 쉘에서 CD를 사용한다. 이 문서의 다른 시간 절약 팁도 있습니다 thegeekstuff.com/2008/10/...은 .
cd -
은 마지막 디렉토리 만 추적하므로 디렉토리를 내부적으로 변경하는 함수를 호출하면 문제가 발생할 수 있다고 생각합니다. 이 경우 함수는 다시 팝업하려는 디렉토리가 아닌 현재 디렉토리로 재설정됩니다. 푸시 / 팝핑이 가장 안전한 방법입니다. 참고 : 나는 내 이론을 테스트하지 않았습니다.
~/somedir/dir3
첫 번째 로 돌아 가지 않겠 popd
습니까?
이 에 정말 유용한 사용 사례 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 -c
dirs stack을 사용하는 간단한 유스 케이스는 cd로 할 수없는 일입니다.
pushd .
현재 디렉토리 XX를 dirs
스택에 추가합니다 . 나중에을 사용하여 이동할 수 있으며 cd
XX로 돌아가려면 popd
디렉토리 트리에서 얼마나 멀리 떨어져 있는지에 관계없이 수행 합니다 (여러 레벨, 옆으로 건너 뛸 수 있음). bash 스크립트에서 특히 유용합니다.
pushd
/ popd
독립적으로 작동 하기 때문에 cd
보다 안정적인 책갈피로 사용할 수 있습니다 cd -
.
에 대한 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 디렉토리로 다시 전환하여 변경 사항을 적용하고 응용 프로그램을 빌드해야합니다.
pushd
과 popd
이상은 cd -
?" 정확히 무엇을 설명하는지에 따라 그 질문에 분명히 대답하지 않았습니다 cd -
. (2) 무슨 요점이 pushd || popd
있습니까? 예, 나는 그것이 cmdA || cmdB
실행 을 의미 한다는 것을 알고 cmdA
있으며 실패하면 실행 cmdB
합니다. 나는이 맥락에서 그것이 무엇을 잘하는지 묻고 있습니다. pushd
인수가 없으면 "디렉토리 스택에서 최상위 두 요소를 교체합니다"를 의미합니다. 현재 디렉토리가 디렉토리 스택의 유일한 요소 인 경우 실패합니다. 이 경우 popd
에도 실패합니다.
pushd
and 의 유스 케이스를 토글 popd
합니다.
pushd || popd
디렉토리 간을 전환 하는 것보다 타이핑이 훨씬 덜 필요한 두 가지 방법 pushd
이 있습니다. 인수없이이 방법 만 사용합니다. cd -
마지막 디렉토리로 다시 전환하기 위해 명시 적으로 존재합니다. 또한이 질문은 pushd
over 의 이점을 요구 cd -
했지만이 답변은 분명히 더 많은 타이핑을 제공합니다.
|| popd
전환 이 필요한 가요? 설명 해주십시오. (충분히 밀지 않았습니까?)
cd -
두 디렉토리 사이를 전환 하는 데 사용하십시오 . 또한 cd
인수가 없으면 홈 디렉토리로 돌아갑니다.
간단히 말해서 2 개 이상의 디렉토리 사이를 탐색해야 할 때, 보통 2 개 이상의 cd -
폴더로 잘라 내지 않기 때문에 보통 몇 번 앞뒤로 탐색해야합니다 .
예를 들어, 버퍼의 히스토리를 보거나 긴 경로를 완료하여 이전의 긴 경로를 다시 시도하지 않고 중요한 경로를 쌓아 두는 것만으로 필요한 경우 숫자만으로 편리하게 이동할 수 있습니다. 복잡한 디렉토리 구조와 긴 경로 사이를 회전하는 것은 매끄럽고 빠릅니다.
내장 기능을 사용하면 스택 순서를 바꾸거나 더 이상 필요하지 않은 디렉토리를 튀어 나와 작업 흐름에 유연성을 부여 할 수 있습니다.
디렉토리 스태킹은 여러 디렉토리에 걸친 작업을 위해 스크립트에서 유사하게 사용될 수 있습니다.
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." 언제 어디서나 그 디렉토리를 복구합니다. "델" 해당 파일을 제거합니다. "집." dir을 홈 dir로 설정합니다 (cd와 동일; p.). "cdl"은 저장된 dirs를 나열합니다. ~ / .mydir $ b 대신 ~ / Dropbox / .mydir $ b (또는 ownCloud와 같은 다른 클라우드 서비스)를 사용하면 다른 계정과 컴퓨터에서 선호하는 디렉토리를 사용하는 현명한 방법을 얻을 수 있습니다.
내 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
터미널에서 가장 최근에 사용한 디렉토리로 이동하는 데 도움이됩니다. :-) 그것이 pop-poped를 사용하는 데 도움이되기를 바랍니다. 나는 cd ~ stackednumber를 사용합니다.
사용 cd
하고하는 것은 cd -
당신 만이 가장 최근에 사용 된 디렉토리 사이를 전환 할 수 있습니다. "디렉토리 작업 세트"크기는 2입니다.
을 사용하면 pushd
작업 세트에 임의로 많은 수의 디렉토리를 유지할 수 있습니다.
나는 pushd
대부분보다는 시간을 사용 cd
합니다. 을 사용하여 활성 디렉토리 스택을 구축 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
현재 디렉토리에 머무르고 스택에서 다른 디렉토리를 제거하십시오.
popd +2
여러 개의 터미널 창이나 탭을 열 때 (작업중인 각 디렉토리마다 하나씩) 하나의 터미널에서 작업 스타일을 갖습니다. 이렇게하면 화면 공간이 절약되고 디렉토리 경로가 모두 하나의 쉘에서 사용 가능하므로 다음과 같은 작업을 수행 할 수 있습니다.
예 :
cp ~2/myfile.txt ~4
less ~2/myfile.txt
에서는 tcsh
아니지만 bash
디렉토리 스택을 파일로 저장하고 나중에 복원 할 수도 있습니다.
저장하기:
dirs -S ~/dirstack
복원:
dirs -L ~/dirstack
그렇지 않으면, 단지 대체 ~
에 bash
와 예제 =
에 사용 tcsh
.
pushd =2
popd =4
popd +1
푸시 / 팝은 사람들이 생각하기에 '디렉토리 스택을 조작하는'명령으로 이러한 명령을 정의하여 사람들이 명령을 가르치는 경향이 있기 때문에 이해하기가 쉽지 않은 간단한 개념입니다.
다른 방법으로 봅니다.
pushed [folder_name] - [folder_name]으로 cd 하고 dir 스택에서 [folder_name] 인 대상을 문서화 하는 반면 스택의 최상위 디렉토리는 항상 현재 디렉토리입니다
popd- 먼저 스택 위에있는 디렉토리 레코드로 cd 한 다음 스택에서 제거합니다.
dirs -dir 스택을 인쇄합니다 (가장 왼쪽에있는 항목이 현재 디렉토리 인 스택 Db로 처리 될 수 있습니다 (스택의 맨 위)).
가장 널리 사용되는 두 가지 사례는 다음과 같습니다.
사용 사례 1 : 푸시 및 팝을 사용하여 탐색
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
내가 문서화 한 폴더로 다시 이동하기 위해 위의 작업을 수행했다고 가정 해 봅시다!
수동으로 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
디렉토리 스택에서 특정 항목을 삭제할 수도 있습니다.
root@mypc:/main$ popd ~4
"문서화"라는 단어를 사용하거나 일종의 Db로 dir 스택에 대해 생각하기를 바랍니다.
cd -
단축 별칭cd ..
등이있는 경우).