Ça dépend. Dans zshvous pouvez configurer cdpour 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 zshsache, 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
PWDetOLDPWD
- 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
somedirsur 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
PWDsur 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 zshet bash. J'ai utilisé bashcomme référence pour les listes ci-dessus.
Dans bashle 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 bashdit:
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 cdintégrée. […]
Printing DIRSTACK( echo ${dirstack[@]}) confirme que le premier élément est identique à $PWD.
Dans zshle répertoire de travail actuel, il ne fait pas partie de la pile de répertoires (mais est toujours affiché avec dirs). man 1 zshbuiltinsdit:
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 dirsdevrait montrer que le PWDne fait pas partie de `dirstack.
Dans les deux shells, dirsle 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 1fait référence au répertoire qui était en cours avant le dernier pushd. En effet, les tableaux dans zshsont généralement numérotés à partir de 1, alors qu'ils sont numérotés à partir 0de 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_PUSHDoption dans zsh( setopt autopushd) cd somedirse 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 setoptpour obtenir une liste d'options qui ne sont pas définies par défaut. Voir, si autopushdapparaît dans la liste.
Mais cela ne change pas cd -pour se comporter comme popd. Au lieu de cela, il pousse simplement $PWDsur 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 popdsur votre système, je suggérerais si cdc'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_PUSHDactivé, 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_DUPSoption.
Pour plus d'options, consultez le manuel .
cddéfinit la variable shellOLDPWDdans le répertoire précédent etcd -est traduite encd "$OLDPWD".