Dipende. In zsh
puoi configurarecd
per inviare automaticamente la vecchia directory nello stack di directory, ma non è l'impostazione predefinita.
Per quanto posso dire zsh
con le impostazioni predefinite si comporta in modo molto simile a bash
:
cd somedir
- cambia directory in
somedir
- salva la directory originale in
OLDPWD
- impostato
PWD="somedir"
- sostituire l'elemento superiore dello stack di directory (come mostrato da
dirs
) con somedir
(il numero di elementi nello stack non cambia).
cd -
:
- cambia directory in
$OLDPWD
- valori di scambio di
PWD
eOLDPWD
- modifica l'elemento superiore dello stack di directory in modo che rifletta (il nuovo)
PWD
pushd somedir
:
- cambia directory in
somedir
- salva la directory originale in
OLDPWD
- impostato
PWD="somedir"
- spingere
somedir
nello stack di directory (estendendolo di un elemento)
popd
:
- salva la directory originale in
OLDPWD
- rimuove il primo elemento dello stack di directory
- cambia directory nel nuovo elemento superiore dello stack di directory
- impostato
PWD
sul nuovo elemento superiore dello stack di directory
Nota: se l'attuale directory di lavoro è considerata un elemento dello stack di directory differisce tra zsh
e bash
. Ho usato bash
come riferimento per gli elenchi di cui sopra.
Nella bash
presente directory di lavoro è considerato l'elemento principale dello stack di directory. La man 1 bash
dice:
pushd [-n] [dir]
[…] Aggiunge dir
allo stack di directory in alto, rendendolo la nuova directory di lavoro corrente come se fosse stata fornita come argomento all'integrato cd
. [...]
Stampa DIRSTACK
( echo ${dirstack[@]}
) conferma che il primo elemento è identico a $PWD
.
Nella zsh
presente directory di lavoro non fa parte dello stack di directory (ma è ancora mostrato con dirs
). man 1 zshbuiltins
dice:
pushd [ -qsLP ] [ arg ]
[…] Cambia la directory corrente e inserisci la vecchia directory corrente nello stack di directory. Nel primo modulo, modifica la directory corrente in arg. [...]
Stampare dirstack
( echo ${dirstack[@]}
) e confrontarlo con l'output di dirs
dovrebbe mostrare che PWD
non fa parte di `dirstack.
In entrambe le shell dirs
stampa l'attuale directory di lavoro come primo elemento. Anche in entrambe le shell, l'elemento stack di directory con l'indice si 1
riferisce alla directory che era corrente prima dell'ultima pushd
. Questo perché le matrici in zsh
sono di solito numerate da 1
, mentre sono numerate da 0
in bash
. Quindi c'è poca differenza pratica
Come detto sopra, questo comportamento può essere modificato in zsh
.
Se si imposta l' AUTO_PUSHD
opzione in zsh
( setopt autopushd
) cd somedir
si comporta come pushd somedir
, la directory precedente viene automaticamente inserita nello stack di directory. Questo è probabilmente il caso sulla tua macchina. È possibile eseguire setopt
per ottenere un elenco di opzioni che non sono impostate nel modo predefinito. Vedi seautopushd
appare nell'elenco.
Ma questo non si modifica cd -
per comportarsi come popd
. Invece spinge semplicemente $PWD
nello stack di directory e cambia directory in $OLDPWD
. Ciò significa che una chiamata ripetuta cd -
farà effettivamente crescere lo stack di directory ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). Se in realtà si comporta esattamente come popd
sul tuo sistema, suggerirei se cd
è effettivamente incorporato (whence -v cd
); è possibile che venga sostituito con un alias o una funzione.
Poiché lo stack di directory crescerà piuttosto rapidamente con AUTO_PUSHD
abilitato, è possibile limitarne le dimensioni impostando il parametro DIRSTACKSIZE
sulla dimensione massima desiderata.
Puoi anche prevenire i duplicati impostando l' PUSHD_IGNORE_DUPS
opzione.
Per ulteriori opzioni, dai un'occhiata al manuale .
cd
imposta la variabile shellOLDPWD
nella directory precedente ecd -
viene tradotto incd "$OLDPWD"
.