Dipende. In zshpuoi configurarecd per inviare automaticamente la vecchia directory nello stack di directory, ma non è l'impostazione predefinita.
Per quanto posso dire zshcon 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
PWDeOLDPWD
- 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
somedirnello 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
PWDsul nuovo elemento superiore dello stack di directory
Nota: se l'attuale directory di lavoro è considerata un elemento dello stack di directory differisce tra zshe bash. Ho usato bashcome riferimento per gli elenchi di cui sopra.
Nella bashpresente directory di lavoro è considerato l'elemento principale dello stack di directory. La man 1 bashdice:
pushd [-n] [dir]
[…] Aggiunge dirallo 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 zshpresente directory di lavoro non fa parte dello stack di directory (ma è ancora mostrato con dirs). man 1 zshbuiltinsdice:
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 dirsdovrebbe mostrare che PWDnon fa parte di `dirstack.
In entrambe le shell dirsstampa l'attuale directory di lavoro come primo elemento. Anche in entrambe le shell, l'elemento stack di directory con l'indice si 1riferisce alla directory che era corrente prima dell'ultima pushd. Questo perché le matrici in zshsono di solito numerate da 1, mentre sono numerate da 0in bash. Quindi c'è poca differenza pratica
Come detto sopra, questo comportamento può essere modificato in zsh .
Se si imposta l' AUTO_PUSHDopzione in zsh( setopt autopushd) cd somedirsi comporta come pushd somedir, la directory precedente viene automaticamente inserita nello stack di directory. Questo è probabilmente il caso sulla tua macchina. È possibile eseguire setoptper 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 $PWDnello 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 popdsul 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_PUSHDabilitato, è possibile limitarne le dimensioni impostando il parametro DIRSTACKSIZEsulla dimensione massima desiderata.
Puoi anche prevenire i duplicati impostando l' PUSHD_IGNORE_DUPSopzione.
Per ulteriori opzioni, dai un'occhiata al manuale .
cdimposta la variabile shellOLDPWDnella directory precedente ecd -viene tradotto incd "$OLDPWD".