Depende. En zshpuede configurar cdpara 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 a bash:
cd somedir
- cambiar directorio a
somedir
- guardar el directorio original en
OLDPWD
- conjunto
PWD="somedir"
- reemplace el elemento superior de la pila del directorio (como se muestra en
dirs) con somedir(el número de elementos en la pila no cambia).
cd -:
- cambiar directorio a
$OLDPWD
- intercambiar valores de
PWDyOLDPWD
- modificar el elemento superior de la pila de directorios para reflejar (el nuevo)
PWD
pushd somedir:
- cambiar directorio a
somedir
- guardar el directorio original en
OLDPWD
- conjunto
PWD="somedir"
- presione
somedirsobre la pila de directorios (extendiéndola en un elemento)
popd:
- guardar el directorio original en
OLDPWD
- eliminar el primer elemento de la pila de directorios
- cambiar el directorio al nuevo elemento superior de la pila de directorios
- establecer
PWDen el nuevo elemento superior de la pila de directorios
Nota: Si el directorio de trabajo actual se considera un elemento de la pila de directorios difiere entre zshy bash. Utilicé bashcomo referencia para las listas anteriores.
En bashel presente directorio de trabajo se considera el elemento superior de la pila de directorios. El man 1 bashdice:
pushd [-n] [dir]
[...] Se agrega dira la pila de directorios en la parte superior, convirtiéndolo en el nuevo directorio de trabajo actual como si hubiera sido suministrado como argumento para el cdbuiltin incorporado. [...]
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 con dirs). man 1 zshbuiltinsdice:
pushd [ -qsLP ] [ arg ]
[…] Cambie el directorio actual y empuje el directorio actual anterior a la pila de directorios. En la primera forma, cambie el directorio actual a arg. [...]
Imprimir dirstack( echo ${dirstack[@]}) y compararlo con la salida de dirsdebería mostrar que PWDno 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 se 1refiere al directorio que era actual antes del último pushd. Esto se debe a que las matrices en zshgeneralmente están numeradas desde 1, mientras que están numeradas desde 0adentro bash. Entonces hay poca diferencia práctica
Como se dijo anteriormente, este comportamiento se puede modificar zsh.
Si configura la AUTO_PUSHDopción en zsh( setopt autopushd) se cd somedircomporta como pushd somedir, el directorio anterior se inserta en la pila de directorios automáticamente. Este es probablemente el caso en su máquina. Puede ejecutar setoptpara obtener una lista de opciones que no están configuradas de manera predeterminada. Vea, si autopushdaparece en la lista.
Pero esto no se modifica cd -para comportarse como popd. En cambio, simplemente empuja $PWDa la pila de directorios y cambia el directorio a $OLDPWD. Eso significa que llamar repetidamente cd -realmente aumentará la pila de directorios ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)). Si realmente se comporta exactamente como popden su sistema, sugeriría si cdes 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ámetro DIRSTACKSIZEal 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 .
cdestablece la variable de shellOLDPWDen el directorio anterior ycd -se traduce acd "$OLDPWD".