"-n" 옵션을 사용한 popd 및 pushd 동작

"-n" 옵션을 사용한 popd 및 pushd 동작

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 +N0이 아닌 값 은 N디렉터리를 변경하지 않습니다. 스택에서 요소만 제거합니다. 그래서 이 상황에서는 -n억제할 변화가 없기 때문에 아무것도 하지 않아도 됩니다.

반대로 popd -nor 를 사용하면 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그대로 아무 관련이 없습니다.

관련 정보