Y a-t-il une différence entre le comportement de pushd / popd dans bash vs zsh? Il semble que dans zsh cd, cd- se comporte exactement de la même façon que pushd / popd (qui ajoute automatiquement le répertoire / pops lorsque cd) tandis que dans bash cd n'affecte pas la pile dir.
Si quelqu'un peut me donner un pointeur, ce serait formidable.
bash
zsh
cd-command
pushd
dragonxlwang
la source
la source
cd
définit la variable shellOLDPWD
dans le répertoire précédent etcd -
est traduite encd "$OLDPWD"
.pushd
aussi de mettreOLDPWD
dirs
détient toujours le PWD comme premier élémentRéponses:
Ça dépend. Dans
zsh
vous pouvez configurercd
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
somedir
OLDPWD
PWD="somedir"
dirs
) parsomedir
(le nombre d'éléments sur la pile ne change pas).cd -
:$OLDPWD
PWD
etOLDPWD
PWD
pushd somedir
:somedir
OLDPWD
PWD="somedir"
somedir
sur la pile de répertoires (en l'étendant d'un élément)popd
:OLDPWD
PWD
sur le nouvel élément supérieur de la pile de répertoiresRemarque: 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
etbash
. 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. Leman 1 bash
dit: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é avecdirs
).man 1 zshbuiltins
dit:Le fait d'imprimer
dirstack
(echo ${dirstack[@]}
) et de le comparer à la sortie dedirs
devrait montrer que lePWD
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'index1
fait référence au répertoire qui était en cours avant le dernierpushd
. En effet, les tableaux danszsh
sont généralement numérotés à partir de1
, alors qu'ils sont numérotés à partir0
debash
. Il y a donc peu de différence pratiqueComme indiqué ci-dessus, ce comportement peut être modifié dans
zsh
.Si vous définissez l'
AUTO_PUSHD
option danszsh
(setopt autopushd
)cd somedir
se comporte commepushd 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écutersetopt
pour obtenir une liste d'options qui ne sont pas définies par défaut. Voir, siautopushd
apparaît dans la liste.Mais cela ne change pas
cd -
pour se comporter commepopd
. 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éscd -
augmenteront la pile de répertoires (($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). Si en fait il se comporte exactement commepopd
sur votre système, je suggérerais sicd
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ètreDIRSTACKSIZE
à 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 .
la source
dirs
?popd
sans avoir à taper (ou même connaître) le chemin.