¿Cómo utilizo los comandos pushd y popd?

¿Cuáles son los usos prácticos de pushd y popd cuando hay una ventaja de usar estos dos comandos sobre cd y cd -?

EDIT : Estoy buscando algunos ejemplos prácticos de usos para estos dos comandos o razones para mantener la pila con directorios (cuando se completa la pestaña, cd -, alias para acortar cd .., etc.).

Respuesta

pushd , popd y dirs son elementos de shell que le permite manipular la pila de directorios . Esto se puede usar para cambiar de directorio pero volver al directorio del que vino.

Por ejemplo

inicie con los siguientes directorios:

$ pwd /home/saml/somedir $ ls dir1 dir2 dir3 

pushd to dir1

$ pushd dir1 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir1 ~/somedir 

El comando dirs confirma que ahora tenemos 2 directorios en la pila. dir1 y el directorio original, somedir. NOTA: Nuestro » actual » directorio es ~/somedir/dir1.

empujado a ../dir3 (porque ahora «estamos dentro de dir1)

$ pushd ../dir3 ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir3 

dirs muestra que ahora tenemos 3 directorios en la pila. dir3, dir1 y somedir. Fíjate en la dirección. Cada directorio nuevo se agrega a la izquierda. Cuando comenzamos a abrir directorios desactivado, también vendrán de la izquierda.

cambiar manualmente los directorios a ../dir2

$ cd ../dir2 $ pwd /home/saml/somedir/dir2 $ dirs ~/somedir/dir2 ~/somedir/dir1 ~/somedir 

Ahora comience a abrir directorios

$ popd ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir1 

Observe que regresamos a dir1.

Pop de nuevo …

$ popd ~/somedir $ pwd /home/saml/somedir 

Y «volvemos a donde empezamos, somedir.

Puede resultar un poco confuso, pero el jefe de la stac k es el directorio en el que se encuentra actualmente. Por lo tanto, cuando volvamos a somedir, aunque dirs muestra esto:

$ dirs ~/somedir 

Nuestra pila de hecho está vacía.

$ popd bash: popd: directory stack empty 

Comentarios

  • Gracias, entiendo totalmente el concepto de pila y cómo funcionan estos comandos. Sin embargo, ‘ estoy buscando algunas razones prácticas para mantener la pila con directorios (cuando tienes la función de completar tabuladores, cd -, alias para acortar cd .., etc.).
  • A menudo uso pushd & popd en scripts porque me salvan de tener que recordar de dónde vengo, siempre puedo popd para volver de donde vine. Normalmente hago popd >/dev/null 2>&1 para silenciarlo. Yo uso cd- todos los días en mi caparazón. También hay algunos otros consejos para ahorrar tiempo en este artículo: thegeekstuff.com/2008/10/… .
  • @Garrett: ninguno que pueda concebir.
  • @Garrett @slm ya que cd - solo rastrea el último directorio, imagino que lo haría Es posible que tenga problemas si llama a una función que también cambia de directorio internamente. en ese caso, la función terminaría restableciéndose, en su directorio actual, no en el directorio al que desea regresar. pushd / popd es el método más seguro. Nota: no he ‘ t probado mi teoría.
  • ¿Por qué no volver a ~/somedir/dir3 después del primer popd?

Responder

Hay un caso de uso realmente útil para los comandos pushd y popd para trabajar con varias carpetas simultáneamente.

Puede navegar por la pila muy fácilmente, ya que está enumerada. Es decir, puede tener varias carpetas de trabajo a su disposición durante el trabajo.

Vea un ejemplo simple a continuación.


Primero, creemos una estructura de carpeta de ejemplo.

 user@vb:~$ mkdir navigate user@vb:~/navigate$ mkdir dir1 user@vb:~/navigate$ mkdir dir2 user@vb:~/navigate$ mkdir dir3 

Luego, puede agregar todas sus carpetas a la pila :

 user@vb:~/navigate$ pushd dir1/ ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir1$ pushd ../dir2/ ~/navigate/dir2 ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir2$ pushd ../dir3/ ~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate 

Puede buscarlo por:

 user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir2 2 ~/navigate/dir1 3 ~/navigate 

Para navegar de forma segura, debe agregar la última carpeta (cero) dos veces, ya que siempre se reescribirá:

 user@vb:~/navigate/dir3$ pushd . user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate 

Ahora, puede saltar a través de estas carpetas y trabajar con apilar como con alias para las carpetas.Supongo que la siguiente parte se explica por sí misma:

 user@vb:~/navigate/dir3$ cd ~4 user@vb:~/navigate$ dirs -v 0 ~/navigate 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate$ cd ~3 user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate/dir1$ touch text.txt user@vb:~/navigate/dir1$ cp text.txt ~2 user@vb:~/navigate/dir1$ ls ~2 text.txt user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate 

Consejo adicional es crear un alias para dirs -v.

Por ejemplo:

# In ~/.bashrc alias dirs="dirs -v" 

Comentarios

  • Y puede borrar la pila con dirs -c
  • +1 para dando algunos ejemplos prácticos. Es ‘ fácil ver lo que pushd / popd hace desde la página del manual, pero dirs y cd ~ # no son obvios al principio.
  • también puede usar una solución como fasd para este tipo de flujo de trabajo, aunque
  • @Jun, hay ‘ s » mkdir dir {1,2,3} » para crear 3 directorios de una sola vez.
  • @JunMurakami ¡esto hizo mi año! ¡Feliz 2020!

Respuesta

Un caso de uso simple para usar la pila de directorios, lo que no se puede hacer con solo cd es :

pushd . agrega el directorio actual XX a la pila dirs. Luego, puede moverse usando cd, y para volver a XX, simplemente haga popd independientemente de qué tan «lejos» se encuentre el árbol de directorios (puede saltar sobre varios niveles, de lado, etc.). Especialmente útil en scripts bash.

Comentarios

  • Creo que esta es la característica que aprovecho más a menudo. Debido a que pushd / popd funcionan independientemente de cd, puede usarlos como un marcador que cd -.
  • Para mí, esto no es cierto. Cada vez que uso cd, mi pila cambia.
  • Oh, eso fue por usar zsh, cuando cambio a bash, funciona bien
  • Esta es la única respuesta sustantiva con respecto a una comparación con cd -, en mi opinión. En cuanto a si pushd foo; < cambio de directorio aleatorio >; popd vale más que a = foo; cd $ a; < cambio de directorio aleatorio >; cd $ a … Para los scripts, puedo ver una pequeña conveniencia sintáctica en el primero (pushd), pero una enorme mejora en la claridad en el segundo (¡variables [explícitas]!). Para una sesión interactiva, creo que asumiría que mi jerarquía de directorios está organizada correctamente en primer lugar, y si me pierdo, simplemente haga cd ~ / back / to / evidente / ruta.
  • @HarendraSingh no ‘ ¿No tiene configurado AUTO_PUSHD? Hará que cd se comporte como pushd, lo desarmará y ‘ volverá a » comportamiento normal «.

Respuesta

pushd y popd le permiten manipular los directorios en la pila.

Cuando pushd un directorio, coloca el directorio actual en la pila y cambia el directorio al especificado como parámetro.

popd le permitirá volver al directorio en la pila.

Si repite, el recorrido del directorio se conservará y podrá volver a los directorios guardados en orden inverso al que los guardó.

Respuesta

Para bash , básicamente: en lugar de usar cd, uno puede use pushd para cambiar de directorio. Con uso práctico: el historial de directorios visitados se guarda (correctamente: apilado) y se puede cambiar entre ellos:

pushd /home; pushd /var; pushd log 

Para ver la pila, use dirs y para una navegación más sencilla (para obtener los números de las » entradas de pila » use:

dirs -v 

Resultado:

me@myhost:/home$ dirs -v 0 /home 1 /var 2 /tmp 

Ahora utilice estos números con cd y ~ como:

cd ~1 

Pero estos números ahora están reorganizados y colocan » 0 » cambiará, así que solo pushd el directorio en la posición superior dos veces (o use un maniquí en la posición 0) como:

me@myhost:/home$ dirs -v 0 /home 1 /home 2 /var 3 /tmp 

Ahora 1..3 mantendrá su posición

(Para liberar el directorio actual de la pila / eliminarlo del historial, use popd)

Responder

El pushd / popd es un concepto tan simple que me tomó un tiempo comprenderlo ya que la gente tiende a enseñarlo definiendo estos comandos como comandos que» manipulan la pila de directorios «, lo que en mi opinión es muy confuso.

Lo veo de otra manera:

pushd [nombre_carpeta] – guardará un cd en [folder_name] y documentará el destino que es [folder_name] en una pila de directorios mientras que el directorio superior en la pila siempre estará el directorio actual en el que se encuentra

popd – primero lo ingresará el registro del directorio que está en la parte superior de la pila y luego elimine la documentación (elimínela de la pila de directorios)

dirs – Imprimirá la pila de directorios (se puede tratar 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 ¡Hice lo anterior ya que me gustaría volver a esas carpetas que documenté!

Tenga en cuenta que si hago un cd manualmente, afectaré la entrada de la pila de directorios 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$ 

Naveguemos 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 

De nuevo, puedo documentar cualquier directorio que desee y luego navegar manualmente a otro directorio, entonces podré volver fácilmente al directorio documentado que inserté en la pila.

Caso de uso 2: Navegando usando el índice de pila numérico

Digamos que presioné usando pushd dir4 dir3 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 realizar cualquier operación de Linux que involucre directorios usando 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 un entrada 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 simplifica el concepto!

Respuesta

En pocas palabras: cuando necesita navegar entre más de 2 directorios, generalmente varias veces hacia atrás & adelante, ya que cd - simplemente no lo cortará con nada más allá de 2 carpetas.

Entonces, por ejemplo, en lugar de tratar de volver a encontrar rutas largas anteriores mirando el historial de su búfer o completando una ruta larga, simplemente apila las importantes y, si es necesario, se mueve convenientemente a ellas solo por su número. La rotación entre estructuras de directorios complejas y rutas largas se vuelve hábil y rápida.

Las funciones incorporadas también le permiten reordenar la pila o sacar los directorios que ya no necesita, lo que permite flexibilidad en su flujo de trabajo.

El apilamiento de directorios también se puede usar en scripts de manera similar para operaciones que abarcan varios directorios.

Respuesta

I Encontré el uso de dirs / popd / pushd un poco incómodo. Se me ocurrió mi solución personal en tcsh, agregando el siguiente código en .alias

 foreach b (. , - 0 1 2 3 4 5 6 7 8 9 ) alias p$b "set a=`pwd`; echo $a >! ~/.mydir"$b alias cd$b "cd "`cat ~/.mydir"$b"`"" alias del$b "rm -v ~/.mydir"$b alias home$b "set a="~"; echo $a >! ~/.mydir"$b end alias cdl "grep / ~/.mydir*" 

de esta manera puse un alias, por ejemplo, «p.» para guardar el directorio de trabajo actual en el archivo ~ / .mydir. y «cd.» para recuperar ese directorio cuando y donde quiera. «del.» elimina el archivo correspondiente; «home.» establece el directorio en el directorio de inicio (equivalente a cd; p.); «cdl» enumera cuáles son los directorios guardados. Tenga en cuenta que si usa ~ / Dropbox / .mydir $ b (o cualquier otro servicio en la nube como ej. ownCloud) en lugar de ~ / .mydir $ b obtienes una forma inteligente para usar sus directorios preferidos en diferentes cuentas y máquinas.

Responder

Usando cd y cd - le permite alternar entre sus dos directorios usados más recientemente. El tamaño de su «conjunto de trabajo de directorio» es dos.

Con pushd, puede mantener una cantidad arbitrariamente grande de directorios en su conjunto de trabajo.

Utilizo pushd la mayor parte del tiempo en lugar de cd. Una vez que haya creado una pila de directorios activos con pushd directory_name, podrá saltar entre ellos todo el día con pushd ~#.

pushd dir1 pushd ../dir2 pushd /full/path/to/dir3 # There are now three directories in the stack. pushd ~3 pushd ~2 # The same three directories are still on the stack, # just in a different order. 

Utilizo popd rara vez, solo cuando quiero eliminar un directorio de la pila cuando sé que ya he terminado usando ese directorio.

Vaya al directorio y elimínelo de la pila:

popd ~2 

Permanezca en el directorio actual y elimine otro directorio del pila:

popd +2 

Terminas con un estilo de trabajo que es similar a tener múltiples ventanas de terminal o pestañas abiertas (una para cada directorio en el que estás «activamente funcionando), pero todo en una terminal.Esto ahorra espacio en la pantalla, además, debido a que todas las rutas de directorio están disponibles en un shell, puede hacer cosas como:

  • copiar archivos entre directorios con los que está trabajando actualmente
  • ver o editar archivos en otro directorio sin ir allí

Ejemplos:

cp ~2/myfile.txt ~4 less ~2/myfile.txt 

En tcsh (pero no bash), incluso puede guardar su pila de directorios en un archivo y restaurarlo más tarde.

Guardar:

dirs -S ~/dirstack 

Restaurar:

dirs -L ~/dirstack 

De lo contrario, simplemente reemplace ~ en los bash ejemplos con = para usar en tcsh.

pushd =2 popd =4 popd +1 

Responder

Lo estoy usando así en mi bash_profile y .bashrc así

vi .bash_profile alias dirs="dirs -v" source d.sh :wq vi .bashrc alias dirs="dirs -v" :wq vi d.sh pushd ~/Documents/GIT/seiso-data pushd ~/Documents/GIT/ewe/EosRegistry pushd ~/Documents/GIT_LODGING/site-cookbooks pushd ~/Documents/CHEF_LODGING pushd . :wq 

ayuda s yo salto entre los directorios más recientes usados en mi terminal. 🙂 Espero que te ayude a usar pushd en lugar de popd. Yo uso cd ~ stackednumber

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *