Ça dépend. Dans zsh
vous pouvez configurer cd
pour pousser automatiquement l'ancien répertoire sur la pile de répertoires, mais ce n'est pas le paramètre par défaut.
Pour autant que je zsh
sache, les paramètres par défaut se comportent de manière très similaire à bash
:
cd somedir
- changer le répertoire en
somedir
- enregistrer le répertoire d'origine dans
OLDPWD
- ensemble
PWD="somedir"
- remplacez l'élément supérieur de la pile de répertoires (comme indiqué par
dirs
) par somedir
(le nombre d'éléments sur la pile ne change pas).
cd -
:
- changer le répertoire en
$OLDPWD
- permuter les valeurs de
PWD
etOLDPWD
- modifier l'élément supérieur de la pile de répertoires pour refléter (le nouveau)
PWD
pushd somedir
:
- changer le répertoire en
somedir
- enregistrer le répertoire d'origine dans
OLDPWD
- ensemble
PWD="somedir"
- pousser
somedir
sur la pile de répertoires (en l'étendant d'un élément)
popd
:
- enregistrer le répertoire d'origine dans
OLDPWD
- supprimer le premier élément de la pile de répertoires
- changer le répertoire en le nouvel élément supérieur de la pile de répertoires
- défini
PWD
sur le nouvel élément supérieur de la pile de répertoires
Remarque: Le fait que le répertoire de travail actuel soit considéré comme un élément de la pile de répertoires diffère entre zsh
et bash
. J'ai utilisé bash
comme référence pour les listes ci-dessus.
Dans bash
le présent répertoire de travail, il est considéré comme l'élément supérieur de la pile de répertoires. Le man 1 bash
dit:
pushd [-n] [dir]
[…] S'ajoute dir
à la pile de répertoires en haut, ce qui en fait le nouveau répertoire de travail actuel comme s'il avait été fourni comme argument à la commande cd
intégrée. […]
Printing DIRSTACK
( echo ${dirstack[@]}
) confirme que le premier élément est identique à $PWD
.
Dans zsh
le répertoire de travail actuel, il ne fait pas partie de la pile de répertoires (mais est toujours affiché avec dirs
). man 1 zshbuiltins
dit:
pushd [ -qsLP ] [ arg ]
[…] Modifiez le répertoire courant et poussez l'ancien répertoire courant sur la pile de répertoires. Dans le premier formulaire, remplacez le répertoire actuel par arg. […]
Le fait d'imprimer dirstack
( echo ${dirstack[@]}
) et de le comparer à la sortie de dirs
devrait montrer que le PWD
ne fait pas partie de `dirstack.
Dans les deux shells, dirs
le répertoire de travail actuel est imprimé comme premier élément. Toujours dans les deux shells, l'élément de pile de répertoires avec l'index 1
fait référence au répertoire qui était en cours avant le dernier pushd
. En effet, les tableaux dans zsh
sont généralement numérotés à partir de 1
, alors qu'ils sont numérotés à partir 0
de bash
. Il y a donc peu de différence pratique
Comme indiqué ci-dessus, ce comportement peut être modifié dans zsh
.
Si vous définissez l' AUTO_PUSHD
option dans zsh
( setopt autopushd
) cd somedir
se comporte comme pushd somedir
, le répertoire précédent est automatiquement poussé sur la pile de répertoires. C'est probablement le cas sur votre machine. Vous pouvez exécuter setopt
pour obtenir une liste d'options qui ne sont pas définies par défaut. Voir, si autopushd
apparaît dans la liste.
Mais cela ne change pas cd -
pour se comporter comme popd
. Au lieu de cela, il pousse simplement $PWD
sur la pile de répertoires et change de répertoire en $OLDPWD
. Cela signifie que les appels répétés cd -
augmenteront la pile de répertoires ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). Si en fait il se comporte exactement comme popd
sur votre système, je suggérerais si cd
c'est en fait le builtin ( whence -v cd
); il est possible qu'il soit remplacé par un alias ou une fonction.
Comme la pile de répertoires augmentera assez rapidement avec AUTO_PUSHD
activé, vous pouvez limiter sa taille en définissant le paramètre DIRSTACKSIZE
à la taille maximale souhaitée.
Vous pouvez également empêcher les doublons en définissant l' PUSHD_IGNORE_DUPS
option.
Pour plus d'options, consultez le manuel .
cd
définit la variable shellOLDPWD
dans le répertoire précédent etcd -
est traduite encd "$OLDPWD"
.