Y a-t-il une différence entre le comportement de Poussad/POPD à Bash vs ZSH? Il semble que CD de ZSH, CD- se comporte exactement la même chose que Poussine/POPD (qui ajoute automatiquement le répertoire de POPS lorsque CD) tandis que dans BASH CD n'affecte pas la pile dir.
Si quelqu'un peut me donner un pointeur qui serait génial.
Ça dépend. Dans zsh
Vous pouvez configurer cd
pour appuyer automatiquement l'ancien répertoire de la pile d'annuaire, mais ce n'est pas le paramètre par défaut.
Pour autant que je puisse dire zsh
avec les paramètres par défaut se comporte très similaire à bash
:
cd somedir
somedir
OLDPWD
PWD="somedir"
dirs
) avec somedir
(le nombre d'éléments sur la pile ne change pas).cd -
: $OLDPWD
PWD
et OLDPWD
PWD
pushd somedir
: somedir
OLDPWD
PWD="somedir"
somedir
sur la pile de répertoires (en prolongeant un élément)popd
: OLDPWD
PWD
sur le nouvel élément supérieur de la pile de répertoires Remarque: si le présent répertoire de travail est 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 est considéré comme l'élément supérieur de la pile d'annuaires. Les man 1 bash
dit:
pushd [-n] [dir]
[...] ajoute
dir
à la pile de répertoires en haut, ce qui en fait le nouvel répertoire de travail actuel comme s'il avait été fourni comme argument sur lecd
intégré. [...]
Impression DIRSTACK
(echo ${dirstack[@]}
) confirme que le premier élément est identique à $PWD
.
Dans zsh
Le présent répertoire de travail ne fait pas partie de la pile de répertoires (mais toujours affichée avec dirs
). man 1 zshbuiltins
dit:
pushd [ -qsLP ] [ arg ]
[...] Modifiez le répertoire actuel et appuyez sur l'ancien répertoire actuel sur la pile de répertoires. Dans la première forme, modifiez le répertoire actuel en Arg. [...]
Impression dirstack
(echo ${dirstack[@]}
) et le comparer à la sortie de dirs
devrait montrer que le PWD
ne fait pas partie de "DRISTACK.
Dans les deux coquilles dirs
imprime le présent répertoire de travail comme premier élément. Également dans les deux obus, l'élément de pile de répertoires avec l'index 1
fait référence au répertoire qui était à jour avant le dernier pushd
. C'est-à-dire parce que les tableaux dans zsh
sont généralement numérotés de 1
, alors qu'ils sont numérotés de 0
dans bash
. Donc, il y a peu de différence pratique
Comme indiqué ci-dessus, ce comportement peut être modifié dans zsh
.
Si vous définissez le AUTO_PUSHD
option dans zsh
(setopt autopushd
) cd somedir
se comporte comme pushd somedir
, le répertoire précédent est enfoncé sur la pile de répertoires automatiquement. 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 modifie pas cd -
Pour se comporter comme popd
. Au lieu de cela, il pousse simplement $PWD
sur la pile d'annuaires et modifier le répertoire à $OLDPWD
. Cela signifie à plusieurs reprises cd -
va réellement cultiver la pile d'annuaire (($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). Si cela se comporte réellement exactement comme popd
sur votre système, je vous suggérerais si cd
est en fait la construction (whence -v cd
); Il est possible que c'est remplacé par un alias ou une fonction.
Lorsque la pile de répertoires se développera assez rapidement avec AUTO_PUSHD
Activé, vous pouvez limiter sa taille en réglant le paramètre DIRSTACKSIZE
à la taille maximale souhaitée.
[.____] Vous pouvez également éviter les doublons en définissant le PUSHD_IGNORE_DUPS
option.
Pour plus d'options, consultez le manuel .