# rm-rf.es

Stack de directorios en bash

En bash, solemos utilizar atajos del comando «cd», como por ejemplo cd - que devuelve la shell al directorio anterior o cd que nos lleva a la home de usuario. No obstante, bash ofrece una serie de comandos (dirs, popd y pushd) para controlar un stack/pila de directorios más avanzada sobre la que podemos añadir, quitar o consultar directorios que luego podemos utilizar para volver a acceder a ellos.

La ventaja de estos comandos sobre «cd -» es que este último solamente guarda el anterior directorio mientras que con pushd podemos almacenar tantos directorios como queramos.

La teoría sobre estos tres comandos es la siguiente:

Ejemplo práctico básico

Guardar 3 directorios en el stack + en el que nos encontramos al principio (home del usuario ~)

[~] $ pushd /usr/local/etc/
/usr/local/etc ~
[/usr/local/etc] $ pushd /var/tmp/
/var/tmp /usr/local/etc ~
[/var/tmp] $ pushd /home/
/home /var/tmp /usr/local/etc ~

Listar el stack de directorios:

[/home] $ dirs -v
 0  /home
 1  /var/tmp
 2  /usr/local/etc
 3  ~

Acceder a los directorios con popd en orden inverso a como los hemos añadido:

[/home] $ popd
/var/tmp /usr/local/etc ~
[/var/tmp] $ popd
/usr/local/etc ~
[/usr/local/etc] $ popd
~
[~] $ popd
bash: popd: directory stack empty

Si no queremos acceder en orden inverso sino a un directorio concreto lo podemos hacer a partir de su ID:

[/var/tmp] $ dirs -v
 0  /var/tmp
 1  /usr/local/etc
 2  ~
[/var/tmp] $ cd $(dirs +1)
[/usr/local/etc] $ pwd
/usr/local/etc

Así que ya sabéis, cuando estéis dentro de una ruta infernal y tengáis que cambiar de directorio para volver a acceder al rato, la guardáis con pushd y luego ejecutáis popd para volver. Con esto seguro que evitáis tener abrir varias shells o terminales en algunas ocasiones.

Salir de la versión móvil