rimuovere o cancellare la pila di percorsi popd / pushd


39

Dopo pushdaverlo utilizzato troppe volte, desidero cancellare l'intera pila di percorsi.

Come avrei popdtutti gli oggetti nella pila?

Mi piacerebbe popdsenza dover sapere quanti ce ne sono nello stack?

Il manuale di Bash non sembra coprire questo .

Perché devo saperlo? Sono esigente e ripulisco lo stack.


1
A proposito, il manuale completo di bash è finito su gnu.org. Se usi la versione tutto su una pagina, potrebbe essere più facile trovare materiale lì.
jw013,

Ah, vorrei che Google lo indicizzasse. Grazie @ jw013
chrisjlee il

Risposte:


47

dirs -c è quello che stai cercando.


1
questo fa svuotare lo stack, ma non senza ripristinare la directory di lavoro dal basso pila
Eliran Malka

8

Per svuotare lo stack e ripristinare la directory di lavoro dal fondo dello stack, è possibile:

  • recuperare quella directory da dirs, passare a quella directory e quindi cancellare lo stack:

    cd "$(dirs -l -0)" && dirs -c

    L' -lopzione qui elencherà i percorsi completi, per assicurarci di non fallire se proviamo a cdentrare ~, e -0recupera la prima voce dal fondo dello stack.

    @ jw013 ha suggerito di rendere questo comando più robusto, evitando le espansioni del percorso:

    pushd -0 && dirs -c
  • oppure, popdfino a quando non si verifica un errore (che è lo stato di una popdchiamata quando lo stack della directory è vuoto):

    while (( $? == 0 )); do popd; done

1
Il primo metodo è esattamente quello che volevo. Il secondo non avrebbe funzionato nel mio caso poiché avevo chiamato pushdalcune volte, quindi rimosso una delle directory nel mezzo, quindi popdnon riuscivo quando ho provato a srotolare. Avevo bisogno di saltare tutte le cose incasinate nel mezzo per tornare da dove avevo iniziato.
Chuck Wilbur,

right @ChuckWilbur - se hai confuso lo stack dir, popdnon ti salverà :)
Eliran Malka

È meglio pushd -0invece di cd "$(dirs ...)".
jw013,

@ jw013 come è così? che rovinerebbe ancora di più lo stack dir (che stiamo cercando di eliminare qui ..)
Eliran Malka,

1
cd "$(...)"funziona nel 90%, probabilmente anche nel 99% dei casi d'uso, ma con pushd -0te puoi dire con sicurezza il 100%. Ci sono così tanti potenziali gotcha e casi limite associati all'espansione dei percorsi di file / directory nella shell che la cosa più solida da fare è semplicemente evitarlo del tutto, il che lo pushd -0fa in modo molto conciso. Non c'è alcuna possibilità di essere scoperti da un bug con un caso strano se non si prende mai il rischio. Se desideri ulteriori letture sui possibili mal di testa associati ai nomi di file / percorsi Unix, un buon punto di partenza è mywiki.wooledge.org/ParsingLs
jw013
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.