Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

pushd 및 popd를 사용하여 Bash 셸 탐색

푸시 명령은 Bash 셸의 내장 기능으로 하드 드라이브의 위치 간 빠른 탐색을 위해 디렉토리를 "북마크"하는 데 도움이 됩니다. 터미널이 컴퓨터를 탐색하는 매우 빠른 방법이라고 이미 느낄 수 있습니다. 키를 몇 번만 누르면 하드 드라이브, 연결된 스토리지 또는 네트워크 공유의 어느 곳으로든 이동할 수 있습니다. 그러나 그 속도는 디렉토리 사이를 왔다 갔다 하거나 파일 시스템 내에서 "잃어버릴" 때 무너질 수 있습니다. 바로 푸시한 문제입니다. 및 해결하는 데 도움이 될 수 있습니다.

푸시

가장 기본적으로 푸시 cd와 매우 유사합니다. . 한 디렉토리에서 다른 디렉토리로 이동합니다. one이라는 디렉토리가 있다고 가정합니다. , two라는 하위 디렉토리가 포함되어 있습니다. , three라는 하위 디렉토리가 포함되어 있습니다. , 등등. 현재 작업 디렉토리가 하나인 경우 , 그런 다음 2로 이동할 수 있습니다. 또는 또는 cd가 있는 곳이면 어디든지 명령:

$ pwd
하나
$ cd 2/3
$ pwd
3

pushd로 동일한 작업을 수행할 수 있습니다. :

$ pwd
1
$ pushd 2/3
~/one/two/three ~/one
$ pwd
3

pushd의 최종 결과 cd와 동일 , 그러나 중간 결과가 추가로 있습니다:pushd 목적지 디렉토리와 출발지를 에코합니다. 이것은 디렉토리 스택입니다. , 그리고 이것이 푸시 독특합니다.

스택

스택은 컴퓨터 용어로 요소 모음을 나타냅니다. 이 명령의 컨텍스트에서 요소는 pushd를 사용하여 최근에 방문한 디렉토리입니다. 명령. 기록이나 이동 경로라고 생각할 수 있습니다.

pushd를 사용하여 파일 시스템 전체를 이동할 수 있습니다.; 매번 이전 위치와 새 위치가 스택에 추가됩니다.

$ 4 푸시
~/one/two/three/four ~/one/two/three ~/one
$ 푸시 5
~/one/two/three/four/ 다섯 ~/하나/둘/셋/넷 ~/하나/둘/셋 ~/하나

스택을 구축하면 책갈피 모음이나 빠른 이동 웨이포인트로 사용할 수 있습니다. 예를 들어 세션 중에 ~/one/two/three/four/five 내에서 많은 작업을 수행한다고 가정해 보겠습니다. 이 예제의 디렉토리 구조. 하나에 가본 적이 있다는 것을 알고 있습니다. 최근에 했지만 푸시에서 위치가 기억나지 않습니다. 스택. +0으로 스택을 볼 수 있습니다. (더하기 기호 다음에 0이 옴) 인수, pushd 스택의 디렉토리로 변경하지 않고 pushd 프롬프트도 표시합니다. 현재 스택을 에코하려면:

$ pushd +0
~/one/two/three/four ~/one/two/three ~/one ~/one/two/three/four/five

또는 dirs 로 스택을 볼 수 있습니다. 명령을 실행하고 -v 를 사용하여 각 디렉토리의 색인 번호를 볼 수 있습니다. 옵션:

$ dirs -v
0  ~/one/two/three/four
1  ~/one/two/three
2  ~/one
3  ~/one/ 둘/셋/넷/다섯

스택의 첫 번째 항목은 현재 위치입니다. pwd로 확인할 수 있습니다. 평소와 같이:

$ pwd
~/one/two/three/four

0(현재 위치 및 스택의 첫 번째 항목)에서 시작하여 두 번째 스택의 요소는 ~/one입니다. , 원하는 목적지입니다. +2를 사용하여 스택에서 앞으로 이동할 수 있습니다. 옵션:

$ pushd +2
~/one ~/one/two/three/four/five ~/one/two/three/four ~/one/two/three
$ pwd
~/하나

이렇게 하면 작업 디렉토리가 ~/one으로 변경됩니다. 또한 새 위치가 맨 앞에 오도록 스택을 이동했습니다.

스택에서 뒤로 이동할 수도 있습니다. 예를 들어, ~/one/two/three에 빠르게 도달하려면 예제 출력이 주어지면 pushd 0으로 시작:

$ pushd -0
~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four

스택에 추가

이 방법으로 스택을 계속 탐색할 수 있으며 최근에 방문한 디렉토리의 정적 목록으로 남습니다. 디렉토리를 추가하려면 디렉토리의 경로를 제공하기만 하면 됩니다. 디렉토리가 스택에 새로 추가되면 예상대로 목록에 추가됩니다.

$ pushd /tmp
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four

그러나 스택에 이미 존재하는 경우 두 번째로 추가됩니다.

$ pushd ~/one
~/one /tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four

스택은 빠른 액세스를 원하는 디렉토리 목록으로 자주 사용되지만 실제로는 사용자가 어디에 있었는지에 대한 진정한 기록입니다. 디렉토리를 스택에 중복으로 추가하지 않으려면 +N을 사용해야 합니다. 및 -N 표기법.

스택에서 디렉토리 제거

스택은 분명히 불변하지 않습니다. pushd로 추가할 수 있습니다. 또는 popd를 사용하여 항목을 제거합니다. .

예를 들어 방금 pushd를 사용했다고 가정해 보겠습니다. ~/one 추가 스택에 ~/one 만들기 현재 작업 디렉토리. 첫 번째(원하는 경우 "zeroeth") 요소를 제거하려면:

$ pwd
~/one
$ popd +0
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one /two/three/four
$ pwd
~/one

물론 0부터 시작하여 모든 요소를 ​​제거할 수 있습니다.

$ pwd ~/one
$ popd +2
/tmp ~/one/two/three ~/one/two/three/four/five ~/one/two/three/four
$ pwd ~/하나

을 사용할 수도 있습니다. 스택 뒤에서 다시 0부터 시작합니다. 예를 들어 스택에서 최종 디렉토리를 제거하려면:

$ popd -0
/tmp ~/one/two/three ~/one/two/three/four/five

이렇게 사용하면 작업 디렉토리를 변경하지 않습니다. 스택만 조작합니다.

popd의 기본 동작 인수가 없는 경우 스택에서 첫 번째(0번째) 항목을 제거하고 다음 항목을 현재 작업 디렉터리로 만듭니다.

이것은 예를 들어 두 개의 다른 디렉토리에서 작업하고 다른 위치로 잠시 피해야 할 때 빠른 변경 명령으로 가장 유용합니다. 정교한 기록이 필요하지 않다면 디렉토리 스택에 대해 생각할 필요가 없습니다.

$ pwd
~/one
$ pushd ~/one/two/three/four/five
$ popd
$ pwd
~/one

또한 pushd를 사용할 필요가 없습니다. 및 빠른 속도로. pushd를 사용하는 경우 다른 위치를 방문하고 버그를 쫓거나 조사를 하는 데 3시간 동안 주의가 산만해지면 디렉토리 스택이 참을성 있게 기다리고 있음을 알게 될 것입니다(터미널 세션을 종료하지 않는 한).

$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr}; 수면 2001
[...]
$ popd
$ pwd
~/one

실제 세계에서 푸시 및 팝업

푸시 명령은 놀라울 정도로 유용합니다. 일단 배우고 나면 그것을 잘 사용할 수 있는 변명을 찾고 디렉토리 스택의 개념에 익숙해질 것입니다. pushd에 익숙해지기 git stash를 이해하는 데 도움이 되었습니다. , pushd와 전혀 관련이 없습니다. 그러나 개념적 무형은 비슷합니다.

푸시 사용 및 쉘 스크립트에서는 유혹적일 수 있지만 일반적으로 피하는 것이 가장 좋습니다. Bash 및 Zsh 외부에서 이식할 수 없으며 스크립트를 다시 읽을 때 둔해질 수 있습니다(pushd +3 cd $HOME/$DIR/$TMP보다 명확하지 않음 또는 유사).

이러한 경고 외에도 일반 Bash 또는 Zsh 사용자라면 pushd를 시도할 수 있고 시도해야 합니다. 및 .