Existe uma diferença entre o comportamento de pushd / popd no bash vs zsh? Parece que no zsh cd, o cd se comporta exatamente como pushd / popd (que adiciona o diretório / pops automaticamente quando o cd) enquanto no bash cd não afeta a pilha de diretórios.
Se alguém puder me dar um ponteiro, isso seria ótimo.
bash
zsh
cd-command
pushd
dragonxlwang
fonte
fonte
cd
define a variável shellOLDPWD
para o diretório anterior ecd -
é traduzido paracd "$OLDPWD"
.pushd
também conjuntosOLDPWD
dirs
sempre detém o PCD como o primeiro elementoRespostas:
Depende. Em
zsh
você pode configurarcd
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 abash
:cd somedir
somedir
OLDPWD
PWD="somedir"
dirs
) porsomedir
(o número de elementos na pilha não muda).cd -
:$OLDPWD
PWD
eOLDPWD
PWD
pushd somedir
:somedir
OLDPWD
PWD="somedir"
somedir
a pilha de diretórios (estendendo-a por um elemento)popd
:OLDPWD
PWD
como o novo elemento superior da pilha de diretóriosNota: Se o diretório de trabalho atual é considerado um elemento da pilha de diretórios difere entre
zsh
ebash
. Eu useibash
como referência para as listas acima.No
bash
diretório de trabalho atual, é considerado o elemento superior da pilha de diretórios. Oman 1 bash
diz: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 comdirs
).man 1 zshbuiltins
diz:A impressão
dirstack
(echo ${dirstack[@]}
) e a comparação com a saída dedirs
devem mostrar que issoPWD
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 índice1
refere-se ao diretório que estava atual antes do últimopushd
. Isso ocorre porque as matrizes inzsh
geralmente são numeradas de1
, enquanto são numeradas de0
inbash
. Portanto, há pouca diferença práticaComo dito acima, esse comportamento pode ser modificado em
zsh
.Se você definir a
AUTO_PUSHD
opção emzsh
(setopt autopushd
)cd somedir
se comporta comopushd somedir
, o diretório anterior é enviado automaticamente para a pilha de diretórios. Este é provavelmente o caso da sua máquina. Você pode executarsetopt
para obter uma lista de opções que não estão definidas da maneira padrão. Veja seautopushd
aparece na lista.Mas isso não modifica
cd -
para se comportar comopopd
. Em vez disso, ele apenas entra$PWD
na pilha de diretórios e altera o diretório para$OLDPWD
. Isso significa que a chamada repetidacd -
aumentará a pilha de diretórios (($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). Se ele realmente se comportar exatamente comopopd
no seu sistema, eu sugeriria secd
é 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âmetroDIRSTACKSIZE
no tamanho máximo desejado.Você também pode impedir duplicatas configurando a
PUSHD_IGNORE_DUPS
opçãoPara mais opções, consulte o manual .
fonte
dirs
?popd
sem a necessidade de digitar (ou mesmo saber) o caminho.