El pushd / popd es un concepto tan simple que me llevó un tiempo comprenderlo, ya que las personas tienden a enseñarlo definiendo estos comandos como comandos que 'manipulan la pila de directorios' que, en mi opinión, es confuso.
Lo veo de otra manera:
pushd [nombre_carpeta] : se cd a [nombre_carpeta] y documentará el destino que es [nombre_carpeta] en una pila de directorios, mientras que el directorio superior en la pila siempre será el directorio actual en el que se encuentra
popd : primero lo colocará en el registro del directorio que está en la parte superior de la pila y luego lo eliminará de la pila
dirs : imprimirá la pila de directorios (puede tratarse como el directorio Db donde la entrada más a la izquierda es el directorio actual (parte superior de la pila)
Entonces, los 2 casos de uso más populares son:
Caso de uso 1: Navegación usando pushd y popd
root@mypc:/main/$ ls
dir1 dir2 dir3 dir4
root@mypc:/main/$ dirs # prints the current stack
/main
root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now:
/main/dir1 /main
root@mypc:/main/dir1$ # I am now in /main/dir1
root@mypc:/main/dir1$ # Now let's go wild and document whatever I want
root@mypc:/main/dir1$ pushd ../dir2
root@mypc:/main/dir2$ # Woo I am in /main/dir2
root@mypc:/main/dir2$ pushd ../dir3
root@mypc:/main/dir3$ # Woo I am in /main/dir3
root@mypc:/main/dir3$ pushd ../dir4
root@mypc:/main/dir4$ # Woo I am in /main/dir4
root@mypc:/main/dir4$ dirs # Now dir stack is:
/main/dir4 /main/dir3 /main/dir2 /main/dir1 /main
¡Digamos que hice lo anterior ya que me gustaría volver a las carpetas que documenté!
Tenga en cuenta que si hago un CD manualmente, afectaré la entrada de la pila del directorio superior (que siempre es el directorio actual)
root@mypc:/main/dir4$ cd .. # Now dir stack is:
# (note that /main appear in the leftmost as well which is the top of the stack)
/main /main/dir3 /main/dir2 /main/dir1 /main
root@mypc:/main$
Vamos a navegar hacia atrás ahora:
root@mypc:/main$ popd
root@mypc:/main$ # Still in /main since it was at the top of the dir stack
root@mypc:/main$ dirs # Stack is now:
/main/dir3 /main/dir2 /main/dir1 /main
root@mypc:/main$ popd
root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2
root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1
root@mypc:/main/dir1$ dirs # Stack is now:
/main
Una vez más, puedo documentar el directorio que quiera y luego navegar manualmente a otro directorio, luego podré volver fácilmente al directorio documentado que inserté en la pila.
Caso de uso 2: Navegar usando el índice numérico de la pila
Digamos que presioné usando pushd dir4 dir3 dir2 dir2 dir1, ahora ejecutando dir -v mostrará:
root@mypc:/main$ dirs -v
0 /main/dir1 (this is the current dir you are in always)
1 /main/dir2
2 /main/dir3
3 /main/dir4
Ahora puede hacer cualquier operación de Linux que implique directorios utilizando el índice de pila:
root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like:
# cp /main/dir2/temp.txt /main/dir3/new_temp.txt
Incluso puede eliminar una entrada específica de la pila de directorios:
root@mypc:/main$ popd ~4
¡Espero que usar las palabras "documentar" o pensar en la pila de directorios como una especie de Db simplifique el concepto!
cd -
, alias para acortarcd ..
, etc.).