popd
디렉터리 스택에서 최상위 항목을 제거하고 새 최상위 디렉터리로 이동합니다. 인수가 제공되지 않으면 popd는 스택에서 최상위 디렉터리를 제거하고 새로운 최상위 디렉터리로 cds합니다. 요소는 dirs에 나열된 첫 번째 디렉터리부터 시작하여 0부터 번호가 지정됩니다. 즉, popd는 popd+0과 같습니다.
-n
스택만 조작되도록 스택에서 디렉터리를 제거할 때 디렉터리의 일반적인 변경을 억제합니다./home/t$ dirs -v 0 ~ 1 /tmp 2 ~/mydata /home/t$ popd -n ~ ~/mydata /home/t$ dirs -v 0 ~ 1 ~/mydata
왜 안 돼:
/home/t$ dirs -v 0 /tmp 1 ~/mydata
pushd
옵션:
-n 추가 시 일반 디렉토리 변경을 비활성화합니다. 디렉터리를 스택에 추가하므로 스택만 조작됩니다.
논쟁:
+N은 N번째 디렉터리(카운트)가 되도록 스택을 회전합니다. "dirs"로 표시되는 목록의 왼쪽부터 시작하여 0) 상단에 있습니다.
-N N번째 디렉터리(count)가 되도록 스택을 회전합니다. "dirs"로 표시되는 목록의 오른쪽부터 시작하여 0) 상단에 있습니다.
dir은 최상위 디렉토리 스택에 DIR을 추가합니다. 새로운 현재 작업 디렉터리입니다.
/tmp$ dirs -v 0 /tmp 1 ~ 2 ~/mydata /tmp$ pushd -n +1 /tmp$ dirs -v 0 /tmp 1 ~/mydata 2 /tmp
왜 안 돼:
/tmp$ dirs -v 0 ~ 1 ~/mydata 2 /tmp
또는
/tmp$ dirs -v 0 /tmp 1 ~ 2 ~/mydata
답변1
스택의 맨 위는 dirs
항상 현재 디렉터리입니다. 그리고 -n
디렉터리 변경은 방지되어야 합니다. 따라서 -n
스택 상단에 대한 변경은 방지되어야 합니다.
당신이 에 있다고 가정합니다 ~
(그러면 스택의 맨 위는 입니다 ~
). 이제 당신은 실행popd
아니요 -n
. ~
그러면 스택의 최상위 요소가 제거되고 현재 디렉터리가 /tmp
.
~ $
0 ~
1 /tmp
2 ~/mydata
~ $ popd
0 /tmp
1 ~/mydata
/tmp $ # you are now in /tmp
표지판은 -n
이러한 행위를 금지해야 합니다. 따라서 스택의 최상위 요소를 제거하는 대신 맨 위에서 두 번째 요소를 제거합니다. 따라서 실행하면 popd -n
현재 디렉터리는 변경되지 않은 상태로 유지됩니다.
~ $
0 ~
1 /tmp # we will remove this one
2 ~/mydata
~ $ popd -n
0 ~
1 ~/mydata
~ $ # you are still in ~
의 경우 pushd
상황이 더 복잡합니다. 이 +N
기호는 N번째 요소를 맨 위로 이동하여 스택을 회전시킵니다. 따라서 /tmp
(스택의 맨 위는 /tmp
) 들어가서 실행하면 pushd +1
스택은 다음 변환을 수행하고 현재 디렉터리는 다음으로 변경됩니다 ~
.
/tmp $ pushd +1
----------------------------
| |
0 /tmp ----- |------>0 ~ |
1 ~ -------------- |-->1 /mydata |
2 ~/mydata------------ 2 /tmp <----|
~ $ # you are now in ~
이번에도 -n
현재 디렉터리에 대한 변경은 억제되어야 합니다. 따라서 동일한 작업을 수행하지만 ~
스택 상단에 배치하는 대신 스택 상단을 변경하지 않고 그대로 둡니다(예: /tmp
).
/tmp $ pushd -n +1
----------------------------
| |
0 /tmp ----- |------>0 /tmp | # instead of ~
1 ~ -------------- |-->1 /mydata |
2 ~/mydata------------ 2 /tmp <----|
/tmp $ # you are still in /tmp
글쎄, 나는 그것이 명백한 행동이 아니라는 데 동의합니다. 그러나 디렉토리를 최상위로 가져오는 것은 해당 디렉토리로 이동하여 수행된다는 점을 기억하면 cd
이해하기가 더 쉽습니다 . 마지막 예( )에서는 pushd -n +1
플래그가 지정되어 있으므로 명령이 실행되지 않습니다. 그래서 당신은 여전히 안에 있으므로 스택의 상단은 여전히 있습니다. cd ~
-n
/tmp
/tmp
답변2
그 효과는 매우 분명합니다 -n
. 인덱스 0의 스택을 변경하지 않습니다.
인덱스 0은 항상 $PWD
(또는 pwd
)이며아니요-n
옵션을 사용하는 경우 변경합니다.
즉, popd
그렇지 않으면 pushd
실행되지 않습니다 cd
.
다른 질문에는 새로운 질문을 하세요.