이것이 예상되는 동작입니까 popd
?
>>> dirs -v
0 dirA
1 dirB
>>> dirs +0
dirA
>>> popd -n +0
dirA
>>> dirs -v
0 dirA
나는 마지막 줄에서 dirB만 스택에 남아 있음을 알려주고 싶습니다. 왜 dirB를 제거했는지 이해할 수 없습니다.
이는 GNU bash 버전 5.2.15(1) 릴리스(aarch64-apple-darwin22.1.0)입니다. 내 Pushd와 Popd가 RVM에 의해 함수로 변환되었는데, 설정을 해제하고 내장된 함수를 사용해도 동작은 동일합니다. 그래서 제가 popd의 의미를 잘못 이해한 것 같습니다.
여기서 dirA는 작업 디렉터리입니다. 매뉴얼에는 "현재 디렉터리는 항상 스택의 첫 번째 디렉터리입니다"라고 나와 있지만 스택에서 항목을 팝할 수도 있다고 나와 있으므로 스택에서 최상위 요소를 팝하려고 하는 이상한 회색 영역일 수도 있습니다. cd
행동을 억제하면서 .
매뉴얼에서:
디렉터리 스택에서 요소를 제거합니다. 요소는 dirs에 나열된 첫 번째 디렉터리부터 0부터 시작하여 번호가 지정됩니다. 즉, popd는 popd+0과 같습니다.
인수가 제공되지 않으면 popd는 스택에서 최상위 디렉터리를 제거하고 새로운 최상위 디렉터리로 변경합니다.
매개변수가 제공된 경우 다음과 같은 의미를 갖습니다.
-n 스택만 조작되도록 스택에서 디렉토리를 제거할 때 디렉토리에 대한 일반적인 변경 사항을 억제합니다.
+N 스택에서 0부터 시작하는 N번째 디렉터리를 제거합니다(dirs에 의해 인쇄된 목록의 왼쪽부터 계산).
-N 스택에서 0부터 시작하는 N번째 디렉토리를 제거합니다(dirs에 의해 인쇄된 목록의 오른쪽부터 계산).
디렉토리 스택의 최상위 요소가 수정되고 -n 옵션이 제공되지 않으면 popd는 cd 내장 명령을 사용하여 스택 상단에 있는 디렉토리로 변경합니다. cd가 실패하면 popd는 0이 아닌 값을 반환합니다.
그렇지 않고 잘못된 옵션이 발견되거나 디렉터리 스택이 비어 있거나 존재하지 않는 디렉터리 스택 항목이 지정된 경우 popd는 실패 상태를 반환합니다.
popd 명령이 성공하면 Bash는 dirs를 실행하여 디렉터리 스택의 최종 내용을 표시하고 상태 0을 반환합니다.