Utilizzo di popd senza rimuovere l'ultimo valore


8

Come posso ottenere il comportamento dell'utilizzo popdsenza effettivamente estrarre l'ultima directory dallo stack? In altre parole, voglio tornare all'ultima directory con cui ho impostato pushd, ma voglio che rimanga in cima allo stack in modo che il prossimo popdmi porti alla stessa directory (che sarebbe ancora in cima al pila) di nuovo.


"Cd -" non funzionerà? Se ho capito, la sequenza è: "pushd d1; pushd d2; pushd d3;" e ora per tornare a d2, giusto?
tpb261,

cd -funziona, ma solo se non cdaltrove fino a quando non si è pronti popd. Di solito rimbalzo in alcuni punti prima di essere pronto a tornare
Freedom_Ben il

Questo è ovvio ... ma in qualche modo mi è sfuggita la parte implicita del "rimbalzare" della tua domanda.
tpb261,

Risposte:


2

Che ne dite di: cd "$(dirs -l -p | sed -n '2{p;q}')"


Fantastico grazie! È un po 'bash-fu se l'ho mai visto. Ho modificato il comando in peekd(tipo di C ++ STL-ish e facile da ricordare per me), quindi posso semplicemente digitare peekdper ottenere il comportamento. alias peekd='cd "$(dirs -l -p | sed -n '\''2{p;q}'\'')"'
Freedom_Ben

3
@Freedom_Ben Questo può essere semplificato incd "$(dirs +1)"
smetti di essere malvagio

@Gilles Quando provo a farlo, dice "bash: cd <mia directory>: nessun file o directory simile" anche se chiaramente esiste. Sai perché è così? Cd non interpreta <la mia directory> correttamente come percorso? Dal messaggio di errore, sembra che dovrebbe funzionare. cioè, <la mia directory> sembra corretta e se scrivo semplicemente "cd <la mia directory>", funziona.
nukeguy,

1
@nukeguy <my directory>Inizia con una tilde? Nel mio commento sopra mancava l' -lopzione per elencare la directory completa piuttosto che usare l' ~abbreviazione. Dovrebbe esserecd "(dirs -l +1)"
Gilles 'SO- smetti di essere malvagio' il

@Gilles Sì! Questo è esattamente quello che stavo cercando, grazie! Forse dovresti pubblicare il tuo commento come una soluzione separata - a mio avviso, è l'opzione più generale e utile su questa discussione.
nukeguy,

10

pushd senza argomenti scambia le prime due voci dello stack, permettendoti di passare da una parte all'altra in modo efficace.

A partire da d1, esegui pushd d2 aggiunge d1 e d2 allo stack e ti lascia in d2. Esegui di nuovo il pushd senza argomenti e tornerai in d1 con d1 e d2 invertiti sullo stack.


6

Se avessi capito bene, potresti pushd .subito dopo popdcosì la popdirectory ed verrà posizionata di nuovo in cima allo stack.


Wow, questa è una soluzione molto semplice ed elegante. Grazie!
Freedom_Ben
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.