eliminar o borrar la pila de rutas popd / pushd

39

Después de pushdpasar demasiadas veces, quiero borrar todo el montón de caminos.

¿Cómo haría popdtodos los artículos en la pila?

Me gustaría popdsin necesidad de saber cuántos hay en la pila.

El manual de bash no parece cubrir esto .

¿Por qué necesito saber esto? Soy fastidioso y limpiar la pila.

chrisjlee
fuente
1
Por cierto, el manual completo de bash ha terminado en gnu.org. Si usa la versión todo en una página, puede ser más fácil encontrar cosas allí.
jw013
Ah, deseo que Google indexe ese. Gracias @ jw013
chrisjlee

Respuestas:

47

dirs -c es lo que buscas.

jw013
fuente
1
esto hace vaciar la pila, pero no restaurar el directorio de trabajo desde el fondo pila
Eliran Malka
8

Para vaciar la pila y restaurar el directorio de trabajo desde la parte inferior de la pila, ya sea:

  • recuperar ese directorio de dirs, cambiar a ese directorio y luego borrar la pila:

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

    La -lopción aquí enumerará las rutas completas, para asegurarse de que no fallemos si tratamos de cdingresar ~, y -0recupera la primera entrada desde la parte inferior de la pila.

    @ jw013 sugirió hacer este comando más robusto, evitando expansiones de ruta:

    pushd -0 && dirs -c
  • o, popdhasta que encuentre un error (que es el estado de una popdllamada cuando la pila de directorios está vacía):

    while (( $? == 0 )); do popd; done
Eliran Malka
fuente
1
El primer método es exactamente lo que quería. El segundo no funcionaría en mi caso, ya que llamé pushdvarias veces, luego eliminé uno de los directorios en el medio y luego popdfallé cuando intenté desenrollarlo. Necesitaba saltar sobre todas las cosas en el medio para volver al punto de partida.
Chuck Wilbur
@ChuckWilbur a la derecha: si codificó la pila de directorios, popdno lo salvará :)
Eliran Malka
Es mejor que en pushd -0lugar de cd "$(dirs ...)".
jw013
@ jw013 ¿cómo es eso? eso interferiría con la pila de directorios aún más (lo que estamos tratando de aclarar aquí ...)
Eliran Malka
1
cd "$(...)"funciona en el 90%, probablemente incluso en el 99% de los casos de uso, pero con pushd -0usted puede decir con confianza el 100%. Hay tantos problemas potenciales y casos extremos asociados con la expansión de las rutas de archivo / directorio en el shell que lo más sólido es evitarlo por completo, lo que pushd -0es muy conciso. No hay posibilidad de que te atrape un error con un caso extraño si nunca te arriesgas. Si desea leer más sobre los posibles dolores de cabeza relacionados con los nombres de archivos / rutas de Unix, un buen punto de partida es mywiki.wooledge.org/ParsingLs
jw013