Depende. Em zsh
você pode configurar cd
para empurrar o diretório antigo na pilha de diretórios automaticamente, mas não é a configuração padrão.
Tanto quanto eu posso dizer zsh
com configurações padrão se comporta muito semelhante a bash
:
-
%código%
- altere o diretório para
cd somedir
- salve o diretório original em
somedir
- definir
OLDPWD
- substitua o elemento principal da pilha de diretórios (conforme mostrado por
PWD="somedir"
) comdirs
(o número de elementos na pilha não é alterado).
- altere o diretório para
-
%código%:
- altere o diretório para
somedir
- valores de swap de
cd -
e$OLDPWD
- modifica o elemento principal da pilha de diretórios para refletir (o novo)
PWD
- altere o diretório para
-
%código%:
- altere o diretório para
OLDPWD
- salvar o diretório original em
PWD
- definir
pushd somedir
- empurre
somedir
para a pilha de diretórios (estendendo-o por um elemento)
- altere o diretório para
-
%código%:
- salvar o diretório original em
OLDPWD
- remove o primeiro elemento da pilha de diretórios
- altere o diretório para o novo elemento superior da pilha de diretórios
- defina
PWD="somedir"
como o novo elemento principal da pilha de diretórios
- salvar o diretório original em
Observação: Se o diretório de trabalho atual é considerado um elemento da pilha de diretórios, ele é diferente entre somedir
e popd
. Eu usei OLDPWD
como referência para as listas acima.
-
Em
PWD
, o diretório de trabalho atual é considerado o principal elemento da pilha de diretórios. Ozsh
diz:pushd [-n] [dir]
[…] Adds
dir
to the directory stack at the top, making it the new current working directory as if it had been supplied as the argument to thecd
builtin. […]A impressão
bash
(bash
) confirma que o primeiro elemento é idêntico abash
. -
Em
man 1 bash
, o diretório de trabalho atual não faz parte da pilha de diretórios (mas ainda é mostrado comDIRSTACK
).echo ${dirstack[@]}
diz:pushd [ -qsLP ] [ arg ]
[…] Change the current directory, and push the old current directory onto the directory stack. In the first form, change the current directory to arg. […]
Imprimir
$PWD
(zsh
) e compará-lo com a saída dedirs
deve mostrar queman 1 zshbuiltins
não faz parte de 'dirstack.
Em ambos os shells, o dirstack
imprime o diretório de trabalho atual como o primeiro elemento. Também em ambos os shells, o elemento da pilha de diretórios com o índice echo ${dirstack[@]}
refere-se ao diretório que era atual antes do último dirs
. Isso ocorre porque as matrizes em PWD
geralmente são numeradas de dirs
, enquanto são numeradas de 1
in pushd
. Portanto, há pouca diferença prática
Como dito acima, esse comportamento pode ser modificado em zsh
.
Se você definir a opção 1
em 0
( bash
) zsh
se comporta como AUTO_PUSHD
, o diretório anterior é colocado automaticamente na pilha de diretórios. Este é provavelmente o caso da sua máquina. Você pode executar zsh
para obter uma lista de opções que não estão definidas como padrão. Veja se setopt autopushd
aparece na lista.
Mas isso não modifica cd somedir
para se comportar como pushd somedir
. Em vez disso, ele simplesmente envia setopt
para a pilha de diretórios e altera o diretório para autopushd
. Isso significa que chamar repetidamente cd -
aumentará a pilha de diretórios ( popd
). Se ele realmente se comportar exatamente como $PWD
em seu sistema, sugiro se $OLDPWD
for realmente o construído ( cd -
); é possível que seja substituído por um alias ou função.
Como a pilha de diretórios aumentará rapidamente com ($PWD $OLDPWD $PWD $OLDPWD $PWD …)
habilitada, você poderá limitar seu tamanho definindo o parâmetro popd
para o tamanho máximo desejado.
Você também pode evitar duplicatas definindo a opção cd
.
Para mais opções, consulte o manual .