¿Hay alguna diferencia entre el comportamiento de pushd / popd en bash vs zsh? Parece que en zsh cd, cd- se comporta exactamente igual que pushd / popd (que agrega el directorio / pops automáticamente cuando cd) mientras que en bash cd no afecta la pila de directorios.
Si alguien me puede dar un puntero, sería genial.
bash
zsh
cd-command
pushd
dragonxlwang
fuente
fuente
cd
establece la variable de shellOLDPWD
en el directorio anterior ycd -
se traduce acd "$OLDPWD"
.pushd
también estableceOLDPWD
dirs
siempre tiene el PWD como primer elementoRespuestas:
Depende. En
zsh
puede configurarcd
para empujar el directorio antiguo en la pila de directorios automáticamente, pero no es la configuración predeterminada.Por lo que puedo decir
zsh
con la configuración predeterminada, se comporta de manera muy similar abash
:cd somedir
somedir
OLDPWD
PWD="somedir"
dirs
) consomedir
(el número de elementos en la pila no cambia).cd -
:$OLDPWD
PWD
yOLDPWD
PWD
pushd somedir
:somedir
OLDPWD
PWD="somedir"
somedir
sobre la pila de directorios (extendiéndola en un elemento)popd
:OLDPWD
PWD
en el nuevo elemento superior de la pila de directoriosNota: Si el directorio de trabajo actual se considera un elemento de la pila de directorios difiere entre
zsh
ybash
. Utilicébash
como referencia para las listas anteriores.En
bash
el presente directorio de trabajo se considera el elemento superior de la pila de directorios. Elman 1 bash
dice:Printing
DIRSTACK
(echo ${dirstack[@]}
) confirma que el primer elemento es idéntico a$PWD
.En
zsh
el presente directorio de trabajo no es parte de la pila de directorios (pero aún se muestra condirs
).man 1 zshbuiltins
dice:Imprimir
dirstack
(echo ${dirstack[@]}
) y compararlo con la salida dedirs
debería mostrar quePWD
no es parte de `dirstack.En ambos shells
dirs
imprime el directorio de trabajo actual como primer elemento. También en ambos shells, el elemento de pila de directorio con el índice se1
refiere al directorio que era actual antes del últimopushd
. Esto se debe a que las matrices enzsh
generalmente están numeradas desde1
, mientras que están numeradas desde0
adentrobash
. Entonces hay poca diferencia prácticaComo se dijo anteriormente, este comportamiento se puede modificar
zsh
.Si configura la
AUTO_PUSHD
opción enzsh
(setopt autopushd
) secd somedir
comporta comopushd somedir
, el directorio anterior se inserta en la pila de directorios automáticamente. Este es probablemente el caso en su máquina. Puede ejecutarsetopt
para obtener una lista de opciones que no están configuradas de manera predeterminada. Vea, siautopushd
aparece en la lista.Pero esto no se modifica
cd -
para comportarse comopopd
. En cambio, simplemente empuja$PWD
a la pila de directorios y cambia el directorio a$OLDPWD
. Eso significa que llamar repetidamentecd -
realmente aumentará la pila de directorios (($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). Si realmente se comporta exactamente comopopd
en su sistema, sugeriría sicd
es realmente el builtin (whence -v cd
); es posible que se reemplace con un alias o función.Como la pila de directorios crecerá bastante rápido con
AUTO_PUSHD
habilitado, puede limitar su tamaño configurando el parámetroDIRSTACKSIZE
al tamaño máximo deseado.También puede evitar duplicados configurando la
PUSHD_IGNORE_DUPS
opción.Para más opciones eche un vistazo al manual .
fuente
dirs
?popd
sin necesidad de escribir (o incluso saber) la ruta.