Depende. Em zshvocê pode configurar cdpara enviar automaticamente o diretório antigo à pilha de diretórios, mas essa não é a configuração padrão.
Tanto quanto eu posso dizer zshcom configurações padrão se comporta muito semelhante a bash:
cd somedir
- mude o diretório para
somedir
- salve o diretório original em
OLDPWD
- conjunto
PWD="somedir"
- substitua o elemento superior da pilha de diretórios (como mostrado por
dirs) por somedir(o número de elementos na pilha não muda).
cd -:
- mude o diretório para
$OLDPWD
- trocar valores de
PWDeOLDPWD
- modifique o elemento superior da pilha de diretórios para refletir (o novo)
PWD
pushd somedir:
- mude o diretório para
somedir
- salve o diretório original em
OLDPWD
- conjunto
PWD="somedir"
- pressione
somedira pilha de diretórios (estendendo-a por um elemento)
popd:
- salve o diretório original em
OLDPWD
- remova o primeiro elemento da pilha de diretórios
- altere o diretório para o novo elemento superior da pilha de diretórios
- definido
PWDcomo o novo elemento superior da pilha de diretórios
Nota: Se o diretório de trabalho atual é considerado um elemento da pilha de diretórios difere entre zshe bash. Eu usei bashcomo referência para as listas acima.
No bashdiretório de trabalho atual, é considerado o elemento superior da pilha de diretórios. O man 1 bashdiz:
pushd [-n] [dir]
[…] Adiciona dirà pilha de diretórios na parte superior, tornando-o o novo diretório de trabalho atual como se tivesse sido fornecido como argumento para o cdbuiltin. [...]
Printing DIRSTACK( echo ${dirstack[@]}) confirma que o primeiro elemento é idêntico a $PWD.
No zshdiretório de trabalho atual não faz parte da pilha de diretórios (mas ainda é mostrado com dirs). man 1 zshbuiltinsdiz:
pushd [ -qsLP ] [ arg ]
[…] Altere o diretório atual e empurre o diretório atual antigo para a pilha de diretórios. No primeiro formulário, altere o diretório atual para arg. [...]
A impressão dirstack( echo ${dirstack[@]}) e a comparação com a saída de dirsdevem mostrar que isso PWDnão faz parte do `dirstack.
Nos dois shells, dirsimprime o diretório de trabalho atual como o primeiro elemento. Também nos dois shells, o elemento da pilha de diretórios com o índice 1refere-se ao diretório que estava atual antes do último pushd. Isso ocorre porque as matrizes in zshgeralmente são numeradas de 1, enquanto são numeradas de 0in bash. Portanto, há pouca diferença prática
Como dito acima, esse comportamento pode ser modificado em zsh.
Se você definir a AUTO_PUSHDopção em zsh( setopt autopushd) cd somedirse comporta como pushd somedir, o diretório anterior é enviado automaticamente para a pilha de diretórios. Este é provavelmente o caso da sua máquina. Você pode executar setoptpara obter uma lista de opções que não estão definidas da maneira padrão. Veja se autopushdaparece na lista.
Mas isso não modifica cd -para se comportar como popd. Em vez disso, ele apenas entra $PWDna pilha de diretórios e altera o diretório para $OLDPWD. Isso significa que a chamada repetida cd -aumentará a pilha de diretórios ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)). Se ele realmente se comportar exatamente como popdno seu sistema, eu sugeriria se cdé realmente o builtin ( whence -v cd); é possível que seja substituído por um apelido ou função.
Como a pilha de diretórios aumentará rapidamente com o AUTO_PUSHDrecurso ativado, você poderá limitar seu tamanho configurando o parâmetro DIRSTACKSIZEno tamanho máximo desejado.
Você também pode impedir duplicatas configurando a PUSHD_IGNORE_DUPSopção
Para mais opções, consulte o manual .
cddefine a variável shellOLDPWDpara o diretório anterior ecd -é traduzido paracd "$OLDPWD".