bash와 zsh에서 pushd/popd의 동작에 차이가 있습니까? zsh cd에서 cd-는 Pushd/popd와 정확히 동일하게 작동하는 것처럼 보이지만(cd 시 /pops 디렉토리를 자동으로 추가), bash cd에서는 디렉토리 스택에 영향을 주지 않습니다.
누군가 나에게 몇 가지 조언을 해줄 수 있다면 좋을 것입니다.
답변1
때에 따라 다르지. 이전 디렉터리를 디렉터리 스택으로 자동 푸시 zsh
하도록 구성할 수 있지만 이것이 cd
기본값은 아닙니다.
내가 알 수 있는 한, zsh
기본 설정은 다음과 매우 유사하게 동작합니다 bash
.
cd somedir
- 디렉토리를 다음으로 변경하십시오.
somedir
- 원본 디렉터리를 다음 위치에 저장하세요.
OLDPWD
- 놓다
PWD="somedir"
- 디렉터리 스택의 최상위 요소(그림 참조
dirs
)somedir
를 (스택의 동일한 수의 요소)로 바꿉니다.
- 디렉토리를 다음으로 변경하십시오.
cd -
:- 디렉토리를 다음으로 변경하십시오.
$OLDPWD
PWD
합계 값을 교환합니다.OLDPWD
- 반영하도록 디렉토리 스택의 최상위 요소 수정(신규)
PWD
- 디렉토리를 다음으로 변경하십시오.
pushd somedir
:- 디렉토리를 다음으로 변경하십시오.
somedir
- 원본 디렉터리를 다음 위치에 저장하세요.
OLDPWD
- 놓다
PWD="somedir"
somedir
디렉터리 스택으로 푸시 (한 요소씩 확장)
- 디렉토리를 다음으로 변경하십시오.
popd
:- 원본 디렉터리를 다음 위치에 저장하세요.
OLDPWD
- 디렉터리 스택의 첫 번째 요소를 제거합니다.
- 디렉터리를 디렉터리 스택의 새로운 최상위 요소로 변경합니다.
PWD
디렉터리 스택의 새로운 최상위 요소로 설정
- 원본 디렉터리를 다음 위치에 저장하세요.
노트:현재 작업 디렉토리가 디렉토리 스택의 요소로 간주되는지 여부는 zsh
와 사이에 다릅니다 bash
. bash
위 목록을 참고용으로 사용합니다 .
현재
bash
작업 디렉터리는 디렉터리 스택의 최상위 요소로 간주됩니다. 설명하다man 1 bash
:pushd [-n] [dir]
dir
[...]는 디렉토리 스택의 맨 위에 추가되어 마치cd
내장 함수에 대한 인수로 제공된 것처럼 새로운 현재 작업 디렉토리가 됩니다. […]Print
DIRSTACK
(echo ${dirstack[@]}
)는 첫 번째 요소가 와 동일함을 확인합니다$PWD
.현재
zsh
작업 디렉터리는 디렉터리 스택의 일부가 아닙니다(그러나 여전히 그렇게 나타납니다dirs
).man 1 zshbuiltins
설명하다:pushd [ -qsLP ] [ arg ]
[...]는 현재 디렉터리를 변경하고 이전 현재 디렉터리를 디렉터리 스택에 푸시합니다. 첫 번째 형식에서는 현재 디렉터리를 arg로 변경합니다. […]
인쇄
dirstack
(echo ${dirstack[@]}
)하고 이를 출력과 비교하면 `dirstack.h의 일부가dirs
아님을 알 수 있습니다PWD
.
두 쉘 모두에서 dirs
현재 작업 디렉토리가 첫 번째 요소로 인쇄됩니다. 또한 두 셸 모두에서 색인화된 디렉터리 스택 요소는 1
마지막 디렉터리 이전의 현재 디렉터리를 참조합니다 pushd
. 이는 일반적으로 배열 안의 번호 는 처음부터 번호가 매겨지는 반면, zsh
안의 1
배열 은 처음부터 번호가 매겨지기 때문입니다. 그래서 실제 큰 차이는 없습니다0
bash
위에서 언급한 대로 이 동작은 에서 수정할 수 있습니다 zsh
.
( ) 에서 이 옵션을 설정하면 AUTO_PUSHD
이전 디렉터리가 디렉터리 스택에 자동으로 푸시되는 것처럼 동작합니다. 이는 귀하의 컴퓨터에 해당될 수 있습니다. 기본 모드가 설정되지 않은 옵션 목록을 얻기 위해 실행할 수 있습니다. 목록에 나타나는지 확인하세요.zsh
setopt autopushd
cd somedir
pushd somedir
setopt
autopushd
cd -
그러나 이것 은 그런 행동 을 수정 하지 않습니다 popd
. 대신, $PWD
디렉토리 스택을 푸시 하고 디렉토리를 로 변경합니다 $OLDPWD
. 이는 cd -
( )에 대한 반복 호출이 실제로 디렉토리 스택을 증가시킨다는 것을 의미합니다 ($PWD $OLDPWD $PWD $OLDPWD $PWD …)
. popd
시스템에서와 똑같이 작동한다면 cd
실제로 내장( whence -v cd
)되어 있는지 제안하고 싶습니다. 별칭이나 함수로 대체될 수 있습니다.
활성화되면 디렉토리 스택이 매우 빠르게 커지므로 매개변수를 원하는 최대 크기로 AUTO_PUSHD
설정하여 크기를 제한할 수 있습니다 . 중복을 방지하기 위한 옵션을 설정할 수도 있습니다 . 더 많은 옵션을 확인하려면 다음을 확인하세요.DIRSTACKSIZE
PUSHD_IGNORE_DUPS
수동.