¿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

cdestablece la variable de shellOLDPWDen el directorio anterior ycd -se traduce acd "$OLDPWD".pushdtambién estableceOLDPWDdirssiempre tiene el PWD como primer elementoRespuestas:
Depende. En
zshpuede configurarcdpara empujar el directorio antiguo en la pila de directorios automáticamente, pero no es la configuración predeterminada.Por lo que puedo decir
zshcon la configuración predeterminada, se comporta de manera muy similar abash:cd somedirsomedirOLDPWDPWD="somedir"dirs) consomedir(el número de elementos en la pila no cambia).cd -:$OLDPWDPWDyOLDPWDPWDpushd somedir:somedirOLDPWDPWD="somedir"somedirsobre la pila de directorios (extendiéndola en un elemento)popd:OLDPWDPWDen 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
zshybash. Utilicébashcomo referencia para las listas anteriores.En
bashel presente directorio de trabajo se considera el elemento superior de la pila de directorios. Elman 1 bashdice:Printing
DIRSTACK(echo ${dirstack[@]}) confirma que el primer elemento es idéntico a$PWD.En
zshel presente directorio de trabajo no es parte de la pila de directorios (pero aún se muestra condirs).man 1 zshbuiltinsdice:Imprimir
dirstack(echo ${dirstack[@]}) y compararlo con la salida dedirsdebería mostrar quePWDno es parte de `dirstack.En ambos shells
dirsimprime el directorio de trabajo actual como primer elemento. También en ambos shells, el elemento de pila de directorio con el índice se1refiere al directorio que era actual antes del últimopushd. Esto se debe a que las matrices enzshgeneralmente están numeradas desde1, mientras que están numeradas desde0adentrobash. Entonces hay poca diferencia prácticaComo se dijo anteriormente, este comportamiento se puede modificar
zsh.Si configura la
AUTO_PUSHDopción enzsh(setopt autopushd) secd somedircomporta comopushd somedir, el directorio anterior se inserta en la pila de directorios automáticamente. Este es probablemente el caso en su máquina. Puede ejecutarsetoptpara obtener una lista de opciones que no están configuradas de manera predeterminada. Vea, siautopushdaparece en la lista.Pero esto no se modifica
cd -para comportarse comopopd. En cambio, simplemente empuja$PWDa 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 comopopden su sistema, sugeriría sicdes 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_PUSHDhabilitado, puede limitar su tamaño configurando el parámetroDIRSTACKSIZEal tamaño máximo deseado.También puede evitar duplicados configurando la
PUSHD_IGNORE_DUPSopción.Para más opciones eche un vistazo al manual .
fuente
dirs?popdsin necesidad de escribir (o incluso saber) la ruta.