Depende. En zsh
puede configurar cd
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 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
PWD
yOLDPWD
- 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
somedir
sobre 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
PWD
en 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 zsh
y bash
. 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. El man 1 bash
dice:
pushd [-n] [dir]
[...] Se agrega dir
a 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 cd
builtin incorporado. [...]
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 con dirs
). man 1 zshbuiltins
dice:
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 dirs
debería mostrar que PWD
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 se 1
refiere al directorio que era actual antes del último pushd
. Esto se debe a que las matrices en zsh
generalmente están numeradas desde 1
, mientras que están numeradas desde 0
adentro bash
. Entonces hay poca diferencia práctica
Como se dijo anteriormente, este comportamiento se puede modificar zsh
.
Si configura la AUTO_PUSHD
opción en zsh
( setopt autopushd
) se cd somedir
comporta 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 setopt
para obtener una lista de opciones que no están configuradas de manera predeterminada. Vea, si autopushd
aparece en la lista.
Pero esto no se modifica cd -
para comportarse como popd
. En cambio, simplemente empuja $PWD
a 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 popd
en su sistema, sugeriría si cd
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ámetro DIRSTACKSIZE
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 .
cd
establece la variable de shellOLDPWD
en el directorio anterior ycd -
se traduce acd "$OLDPWD"
.