Usando popd sin eliminar el último valor

8

¿Cómo puedo obtener el comportamiento de usar popdsin realmente sacar el último directorio de la pila? En otras palabras, quiero volver al último directorio con el que configuré pushd, pero quiero que permanezca en la parte superior de la pila para que el siguiente popdme lleve al mismo directorio (que aún estaría en la parte superior del directorio). apilar) de nuevo.

Freedom_Ben
fuente
¿No funcionará "cd -"? Si entiendo, la secuencia es: "pushd d1; pushd d2; pushd d3;" y ahora para volver a d2, ¿verdad?
tpb261
cd -funciona, pero solo si no lo hace en cdotro lugar hasta que esté listo para hacerlo popd. Por lo general, salto a algunos lugares antes de estar listo para regresar
Freedom_Ben
Eso es obvio ... pero de alguna manera me perdí la parte implícita de "rebotar" de tu pregunta.
tpb261

Respuestas:

2

Qué tal si: cd "$(dirs -l -p | sed -n '2{p;q}')"

Glenn Jackman
fuente
¡Increíble gracias! Eso es algo de bash-fu si alguna vez lo he visto. Alias ​​ese comando a peekd(tipo de C ++ STL-ish y fácil de recordar para mí), así que solo puedo escribir peekdpara obtener el comportamiento. alias peekd='cd "$(dirs -l -p | sed -n '\''2{p;q}'\'')"'
Freedom_Ben
3
@Freedom_Ben Esto se puede simplificar acd "$(dirs +1)"
Gilles 'SO- deja de ser malvado'
@Gilles Cuando trato de hacer esto, dice "bash: cd <mi directorio>: No existe tal archivo o directorio" aunque exista claramente. ¿Sabes por qué es eso? ¿El cd no interpreta <mi directorio> correctamente como una ruta? Desde el mensaje de error, parece que debería funcionar. es decir, <mi directorio> parece correcto y si simplemente escribo "cd <mi directorio>", funciona.
nukeguy
1
@nukeguy ¿ <my directory>Comienza con una tilde? Mi comentario anterior no tenía la -lopción de listar el directorio completo en lugar de usar la ~abreviatura. Debería sercd "(dirs -l +1)"
Gilles 'SO- deja de ser malvado'
@Gilles ¡Sí! Eso es exactamente lo que estaba buscando, ¡gracias! Tal vez debería publicar su comentario como una solución separada; en mi opinión, es la opción más general y útil en este hilo.
nukeguy
10

pushd sin argumentos intercambia las dos primeras entradas en la pila, lo que le permite hacer un cd de manera efectiva entre ellas.

Comenzando en d1, ejecutar pushd d2 agrega d1 y d2 a la pila y te deja en d2. Ejecute pushd nuevamente sin argumentos, y estará de vuelta en d1 con d1 y d2 invertidos en la pila.

Stephen Davison
fuente
6

Si entendí correctamente, podría hacerlo pushd .justo después popdpara que el popdirectorio ed se coloque nuevamente en la parte superior de la pila.

Eric Carvalho
fuente
Wow, esa es una solución muy fácil y elegante. ¡Gracias!
Freedom_Ben