Depende. Em zsh
você pode configurar cd
para enviar automaticamente o diretório antigo à pilha de diretórios, mas essa não é a configuração padrão.
Tanto quanto eu posso dizer zsh
com 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
PWD
eOLDPWD
- 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
somedir
a 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
PWD
como 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 zsh
e bash
. Eu usei bash
como referência para as listas acima.
No bash
diretório de trabalho atual, é considerado o elemento superior da pilha de diretórios. O man 1 bash
diz:
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 cd
builtin. [...]
Printing DIRSTACK
( echo ${dirstack[@]}
) confirma que o primeiro elemento é idêntico a $PWD
.
No zsh
diretório de trabalho atual não faz parte da pilha de diretórios (mas ainda é mostrado com dirs
). man 1 zshbuiltins
diz:
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 dirs
devem mostrar que isso PWD
não faz parte do `dirstack.
Nos dois shells, dirs
imprime 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 1
refere-se ao diretório que estava atual antes do último pushd
. Isso ocorre porque as matrizes in zsh
geralmente são numeradas de 1
, enquanto são numeradas de 0
in bash
. Portanto, há pouca diferença prática
Como dito acima, esse comportamento pode ser modificado em zsh
.
Se você definir a AUTO_PUSHD
opção em zsh
( setopt autopushd
) cd somedir
se 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 setopt
para obter uma lista de opções que não estão definidas da maneira padrão. Veja se autopushd
aparece na lista.
Mas isso não modifica cd -
para se comportar como popd
. Em vez disso, ele apenas entra $PWD
na 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 popd
no 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_PUSHD
recurso ativado, você poderá limitar seu tamanho configurando o parâmetro DIRSTACKSIZE
no tamanho máximo desejado.
Você também pode impedir duplicatas configurando a PUSHD_IGNORE_DUPS
opção
Para mais opções, consulte o manual .
cd
define a variável shellOLDPWD
para o diretório anterior ecd -
é traduzido paracd "$OLDPWD"
.