bash와 zsh에서 push / popd의 동작에는 차이가 있습니까? zsh cd에서는 cd-가 bash cd가 dir 스택에 영향을 미치지 않는 동안 pushd / popd (cd 일 때 자동으로 디렉토리 추가 / pop)와 정확히 동일하게 동작합니다.
누군가 나에게 훌륭한 포인터를 줄 수 있다면.
pushd
설정했습니다OLDPWD
dirs
은 PWD를 항상 첫 번째 요소로 유지합니다
bash와 zsh에서 push / popd의 동작에는 차이가 있습니까? zsh cd에서는 cd-가 bash cd가 dir 스택에 영향을 미치지 않는 동안 pushd / popd (cd 일 때 자동으로 디렉토리 추가 / pop)와 정확히 동일하게 동작합니다.
누군가 나에게 훌륭한 포인터를 줄 수 있다면.
pushd
설정했습니다OLDPWD
dirs
은 PWD를 항상 첫 번째 요소로 유지합니다
답변:
때에 따라 다르지. 에서 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
있습니다.
더 많은 옵션은 매뉴얼을 참조하십시오 .
dirs
입니까?
popd
경로를 입력하거나 알 필요없이 이전에 방문한 디렉토리로 돌아갈 수 있습니다 .
cd
은 쉘 변수OLDPWD
를 이전 디렉토리로 설정하고cd -
로 변환됩니다cd "$OLDPWD"
.