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:

  • pushd: guarda el directorio actual al principio del stack de directorios. Si le pasamos como parámetro un directorio guardará el directorio actual y el especificado (este último primero).
  • popd: elimina el primer directorio del stack de directorios y hace un «cd» contra ese directorio.
  • dirs: muestra el listado de directorios almacenados en el stack.

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.

5 comentarios en “Stack de directorios en bash

  1. Siempre estoy haciendo malabares para solucionar este problema y resulta que tiene una solución fácil y sencilla.

  2. Para acceder directamente a un directorio por el ID también se puede poniendo una virgulilla delante del mismo. Por ejemplo cd ~3.

Comments are closed.