El empuje y popd Los comandos son características integradas del shell de Bash para ayudarlo a "marcar" directorios para una navegación rápida entre ubicaciones en su disco duro. Es posible que ya sienta que la terminal es una forma increíblemente rápida de navegar por su computadora; con solo presionar unas pocas teclas, puede ir a cualquier parte de su disco duro, almacenamiento adjunto o recurso compartido de red. Pero esa velocidad puede fallar cuando se encuentra yendo y viniendo entre directorios, o cuando se "pierde" dentro de su sistema de archivos. Esos son precisamente los problemas pushd y popd puede ayudarte a resolver.
empujar
En su forma más básica, pushd se parece mucho a cd . Te lleva de un directorio a otro. Suponga que tiene un directorio llamado uno , que contiene un subdirectorio llamado dos , que contiene un subdirectorio llamado tres , y así. Si su directorio de trabajo actual es uno , entonces puedes moverte a dos o tres o en cualquier lugar con el cd comando:
$ pwd
one
$ cd two/three
$ pwd
three
Puedes hacer lo mismo con pushd :
$ pwd
one
$ pushd two/three
~/one/two/three ~/one
$ pwd
three
El resultado final de pushd es lo mismo que cd , pero hay un resultado intermedio adicional:pushd repite su directorio de destino y su punto de origen. Esta es su pila de directorios , y es lo que hace que pushd único.
Pilas
Una pila, en terminología informática, se refiere a una colección de elementos. En el contexto de este comando, los elementos son directorios que ha visitado recientemente usando pushd dominio. Puedes pensar en ello como una historia o un rastro de migas de pan.
Puede moverse por todo su sistema de archivos con pushd; cada vez, sus ubicaciones anteriores y nuevas se agregan a la pila:
$ pushd four
~/one/two/three/four ~/one/two/three ~/one
$ pushd five
~/one/two/three/four/five ~/one/two/three/four ~/one/two/three ~/one
Navegando la pila
Una vez que haya creado una pila, puede usarla como una colección de marcadores o puntos de ruta de viaje rápido. Por ejemplo, suponga que durante una sesión está trabajando mucho dentro del ~/uno/dos/tres/cuatro/cinco estructura de directorios de este ejemplo. Sabes que has estado en uno recientemente, pero no puede recordar dónde se encuentra en su pushd pila. Puedes ver tu pila con el +0 (que es un signo más seguido de un cero), que le dice a pushd no cambiar a ningún directorio en su pila, pero también solicita pushd para hacer eco de su pila actual:
$ pushd +0
~/one/two/three/four ~/one/two/three ~/one ~/one/two/three/four/five
Alternativamente, puede ver la pila con los dirs y puede ver el número de índice de cada directorio usando -v opción:
$ dirs -v
0 ~/one/two/three/four
1 ~/one/two/three
2 ~/one
3 ~/one/two/three/four/five
La primera entrada en su pila es su ubicación actual. Puede confirmarlo con pwd como siempre:
$ pwd
~/one/two/three/four
Comenzando en 0 (su ubicación actual y la primera entrada de su pila), el segundo elemento en tu pila es ~/one , que es su destino deseado. Puedes avanzar en tu pila usando el +2 opción:
$ pushd +2
~/one ~/one/two/three/four/five ~/one/two/three/four ~/one/two/three
$ pwd
~/one
Esto cambia su directorio de trabajo a ~/one y también ha movido la pila para que su nueva ubicación esté al frente.
También puede retroceder en su pila. Por ejemplo, para llegar rápidamente a ~/uno/dos/tres dado el resultado del ejemplo, puede retroceder uno, teniendo en cuenta que pushd comienza con 0:
$ pushd -0
~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
Agregando a la pila
Puede continuar navegando por su pila de esta manera y seguirá siendo una lista estática de sus directorios visitados recientemente. Si desea agregar un directorio, simplemente proporcione la ruta del directorio. Si un directorio es nuevo en la pila, se agrega a la lista tal como lo esperaría:
$ pushd /tmp
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
Pero si ya existe en la pila, se agrega por segunda vez:
$ pushd ~/one
~/one /tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
Si bien la pila se usa a menudo como una lista de directorios a los que desea acceder rápidamente, en realidad es un historial real de dónde ha estado. Si no desea agregar un directorio de forma redundante a la pila, debe usar +N y -N notación.
Eliminando directorios de la pila
Su pila, obviamente, no es inmutable. Puedes agregarle con pushd o elimine elementos de él con popd .
Por ejemplo, suponga que acaba de usar pushd para agregar ~/uno a tu pila, haciendo ~/one su directorio de trabajo actual. Para eliminar el primer elemento (o "cero", si lo prefiere):
$ pwd
~/one
$ popd +0
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
$ pwd
~/one
Por supuesto, puede eliminar cualquier elemento, comenzando su cuenta en 0:
$ pwd ~/one
$ popd +2
/tmp ~/one/two/three ~/one/two/three/four/five ~/one/two/three/four
$ pwd ~/one
También puede usar popd desde la parte posterior de su pila, nuevamente comenzando con 0. Por ejemplo, para eliminar el directorio final de su pila:
$ popd -0
/tmp ~/one/two/three ~/one/two/three/four/five
Cuando se usa así, popd no cambia su directorio de trabajo. Solo manipula tu pila.
Navegando con popd
El comportamiento predeterminado de popd , sin argumentos, es eliminar el primer elemento (cero) de su pila y convertir el siguiente elemento en su directorio de trabajo actual.
Esto es más útil como un comando de cambio rápido, cuando, por ejemplo, está trabajando en dos directorios diferentes y solo necesita escabullirse por un momento a otra ubicación. No tiene que pensar en su pila de directorios si no necesita un historial elaborado:
$ pwd
~/one
$ pushd ~/one/two/three/four/five
$ popd
$ pwd
~/one
Tampoco está obligado a usar pushd y popd en rapida sucesion. Si usa pushd para visitar una ubicación diferente, luego distraerse durante tres horas persiguiendo un error o investigando, encontrará su pila de directorio esperando pacientemente (a menos que haya terminado su sesión de terminal):
$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr}; sleep 2001
[...]
$ popd
$ pwd
~/one
Pushd y popd en el mundo real
El empuje y popd Los comandos son sorprendentemente útiles. Una vez que los aprenda, encontrará excusas para darles un buen uso y se familiarizará con el concepto de la pila de directorios. Sentirse cómodo con pushd fue lo que me ayudó a entender git stash , que no tiene nada que ver con pushd pero similar en intangibilidad conceptual.
Usando pushd y popd Los scripts en shell pueden ser tentadores, pero en general, probablemente sea mejor evitarlos. No son portátiles fuera de Bash y Zsh, y pueden resultar obtusos cuando vuelve a leer un script (pushd +3 es menos claro que cd $HOME/$DIR/$TMP o similar).
Además de estas advertencias, si es un usuario habitual de Bash o Zsh, puede y debe probar pushd y popd .