
pushd
저는 bash(Cygwin, 매뉴얼 페이지에 "GNU bash 4.1"이라고 표시됨)를 실험 해 보았는데 popd
매뉴얼 페이지가 동작과 일치하지 않는 것 같습니다.
의 경우 pushd
명령은
% pushd +1
둘 다 스택을 회전하고 작업 디렉터리를 변경합니다.
% pushd -n +1
그냥 스택을 회전시킵니다. 이것은 매뉴얼 페이지와 일치하는 것 같습니다.
하지만
% popd +1
스택에서 항목을 제거하지만 작업 디렉터리는 변경하지 않습니다("-n"이 제공되지 않았더라도). 이는 아래 인용된 매뉴얼 페이지와 일치하지 않는 것 같습니다.
인수가 제공된 경우 다음과 같은 의미를 갖습니다.-N 스택에서 디렉터리를 제거할 때 디렉터리의 일반적인 변경을 억제하여 스택만 조작합니다.
+N 제거합니다N표시된 목록의 왼쪽부터 세는 번째 항목
dirs
, 0부터 시작합니다. 예를 들어, “popd +0
”는 첫 번째 디렉터리를 제거하고 “popd +1
”는 두 번째 디렉터리를 제거합니다.
원래 이런 식인가요?
답변1
나는 이제 popd/pushd를 실험하고 있으며 이것이 어떻게 되어야 하는지 생각합니다. 논리는 -n
디렉토리 변경을 억제하는 것입니다.만약에없어야 했어요 -n
.
popd +N
0이 아닌 값 은 N
디렉터리를 변경하지 않습니다. 스택에서 요소만 제거합니다. 그래서 이 상황에서는 -n
억제할 변화가 없기 때문에 아무것도 하지 않아도 됩니다.
반대로 popd -n
or 를 사용하면 popd -n +0
스택의 맨 위 요소가 아닌 두 번째 최상위 요소가 제거됩니다. 왜냐하면 최상위 항목을 제거하면 디렉터리가 변경되기 때문입니다. 내 말은 다음과 같은 경우입니다.
0 ~/one/two/three
1 ~/one/two
2 ~/one
3 ~
당신이 할 때나 popd +0
없을 popd
때-n
현재 디렉터리는 ~/one/two로 변경되고 dirs 스택은 다음과 같습니다.
1 ~/one/two
2 ~/one
3 ~
따라서 -n
이 동작을 억제해야 합니다. 따라서 만약에,대신에실행했거나 popd -n +0
여전히 popd -n
이전 디렉터리에 있고 dirs 스택은 이제 다음과 같습니다.
0 ~/one/two/three
1 ~/one
2 ~
두 번째 최상위 요소 ~/one/two가 맨 위 대신 제거된 것을 볼 수 있습니다(이전 디렉토리에 머물 수 있도록).
그래서 여기서 강조하고 싶은 것은 dirs 스택의 최상위가 항상 현재 디렉터리라는 것입니다. 그리고 -n
디렉터리 변경을 방지해야 합니다. 따라서 -n
스택 상단의 변경을 방지해야 합니다. 하지만 스택의 맨 위가 변경되지 않으면 플래그는 -n
그대로 아무 관련이 없습니다.