bash와 zsh에서 push / popd의 동작에는 차이가 있습니까? zsh cd에서는 cd-가 bash cd가 dir 스택에 영향을 미치지 않는 동안 pushd / popd (cd 일 때 자동으로 디렉토리 추가 / pop)와 정확히 동일하게 동작합니다.
누군가 나에게 훌륭한 포인터를 줄 수 있다면.
답변
때에 따라 다르지. 에서 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
내장에 대한 인수로 제공된 것처럼 새로운 현재 작업 디렉토리로 만듭니다. […]인쇄
DIRSTACK
(echo ${dirstack[@]}
)는 첫 번째 요소가와 동일 함을 확인합니다$PWD
. -
에서
zsh
현재 작업 디렉토리 디렉토리 스택의 일부 (하지만 여전히 함께 표시되지 않습니다dirs
).man 1 zshbuiltins
말한다 :pushd [ -qsLP ] [ arg ]
[…] 현재 디렉토리를 변경하고 이전 현재 디렉토리를 디렉토리 스택으로 푸시하십시오. 첫 번째 양식에서 현재 디렉토리를 arg로 변경하십시오. […]
인쇄
dirstack
(echo ${dirstack[@]}
)과의 출력과 비교dirs
(가) 것을 표시한다PWD
DIRSTACK ‘의 일부가 아니다.
두 쉘 모두 dirs
에서 현재 작업 디렉토리를 첫 번째 요소로 인쇄합니다. 또한 두 쉘 모두에서 색인이있는 디렉토리 스택 요소 1
는 마지막 이전의 디렉토리를 참조합니다 pushd
. in의 배열 zsh
은 일반적으로에서 번호 1
가 매겨지고 반면에는 0
in의 번호가 매겨 지기 때문 입니다 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
있습니다.
더 많은 옵션은 매뉴얼을 참조하십시오 .