pushd
, popd
y dirs
son componentes integrados de shell que le permiten manipular el pila de directorios . Esto se puede usar para cambiar los directorios pero volver al directorio del que vino.
Por ejemplo
Comience con los siguientes directorios:
$ ls
dir1 dir2 dir3
empujado a dir1
$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir
dirs
El comando confirma que tenemos 2 directorios en la pila ahora. dir1
y el directorio original, somedir
.
empujado a ../dir3 (porque estamos dentro dir1
ahora)
$ pushd ../dir3
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir3
dirs
muestra que tenemos 3 directorios en la pila ahora. dir3
,dir1
Y somedir
. Fíjate en la dirección. Cada nuevo directorio se agrega a la izquierda. Cuando comenzamos a abrir directorios, también vendrán desde 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 volvimos a dir1
.
Pop de nuevo ...
$ popd
~/somedir
$ pwd
/home/saml/somedir
Y estamos de vuelta donde empezamos, somedir
.
Puede ser un poco confuso, pero el encabezado de la pila es el directorio en el que se encuentra actualmente. Por lo tanto, cuando volvamos a somedir
, aunque dirs
muestra esto:
$ dirs
~/somedir
Nuestra pila está de hecho vacía.
$ popd
bash: popd: directory stack empty
cd -
, alias para acortarcd ..
, etc.).pushd
&popd
en scripts b / c, me salvan de tener que recordar de dónde venía, siempre puedopopd
volver de donde vine. Usualmente lo hagopopd >/dev/null 2>&1
para hacerlo en silencio. Yo uso cd- todos los días en mi shell. También hay otros consejos para ahorrar tiempo en este artículo: thegeekstuff.com/2008/10/… .cd -
solo rastrea el último directorio, imagino que sería posible tener problemas si llama a una función que también cambia el directorio internamente. en ese caso, la función terminaría restableciéndose en su directorio actual, no en el directorio al que desea volver a aparecer. pushd / popd es el método más seguro. Nota: no he probado mi teoría.~/somedir/dir3
después del primeropopd
?Hay un caso de uso
pushd
ypopd
comandos realmente útiles para trabajar con varias carpetas simultáneamente.Puede navegar por la pila muy fácilmente, ya que se enumera. 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 carpetas de ejemplo.
Luego puede agregar todas sus carpetas a la pila:
Puedes buscarlo por:
Para navegar de forma segura, debe agregar la última carpeta (cero) dos veces, ya que siempre se reescribirá:
Ahora, puede saltar a través de estas carpetas y trabajar con stack como con alias para las carpetas. Supongo que la siguiente parte se explica por sí misma:
Un consejo adicional es crear algunos alias para
dirs -v
.Por ejemplo:
fuente
dirs -c
Un caso de uso simple para usar la pila de directorios que no puede hacer con solo cd es:
pushd .
agrega el directorio actual XX a ladirs
pila. Después, puedes moverte usandocd
, y para volver a XX lo hacespopd
sin importar cuán "lejos" estés en el árbol de directorios (puedes saltar sobre múltiples niveles, de lado, etc.). Especialmente útil en scripts de bash.fuente
pushd
/popd
trabajo independiente decd
, puede usarlos como un marcador más estable quecd -
.pushd
y lepopd
permite manipular los directorios en la pila.Cuando es
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ó.
fuente
para bash , básicamente: en lugar de usar cd, uno puede usar
pushd
para cambiar los directores, con el uso práctico: el historial de directorios visitados se guarda (correctamente: apilado) y uno puede cambiar entre ellosPara ver el uso de la pila
dirs
y para una navegación más fácil (para obtener los números de las "entradas de pila", use:Salida:
Ahora utilice estos números con
cd
y~
como:Pero estos números se reorganizan ahora y la posición "0" cambiará, por lo que solo
pushd
el directorio a la posición superior dos veces (o use un ficticio en la posición 0) como:ahora 1..3 mantendrá su posición
(para liberar el directorio actual de la pila / eliminarlo del uso del historial
popd
)fuente
Un uso práctico que he encontrado es alternar entre directorios usando pushd y popd.
Supongamos que tenemos dos directorios dir1 y dir2 y necesito alternar entre ellos continuamente por alguna razón xyz.
Actualmente estoy en somedir que tiene dos directorios
dir1
ydir2
:Ahora cambio a
dir1
Ahora agregaré
dir1
a la pila y cambiaré adir2
Como puede ver, ahora tengo
dir2
ydir1
en la pila y actualmente estoy endir2
.Ahora para volver a
dir1
, voy a correrpushd || popd
.Voila, estoy en dir1 y tengo dir1 y dir2 en la pila. Para volver a dir2, vuelva a ejecutar
pushd || popd
Esta es una manera simple de alternar entre directorios. Ahora, puede saber qué, ¿por qué necesito alternar entre directorios? Bueno, un caso de uso es, cuando trabajo en una aplicación web, tengo mi archivo make en un directorio y mis archivos de registro en otro directorio. A menudo, al depurar la aplicación, necesito cambiar entre el directorio de registro, verificar los últimos registros y luego volver al directorio de creación, realizar algunos cambios y compilar la aplicación.
fuente
pushd
y porpopd
encimacd -
?" Claramente no has respondido esa pregunta, ya que estás describiendo exactamente lo quecd -
hace. (2) ¿Cuál es el punto de decirpushd || popd
? Sí, sé que esocmdA || cmdB
significa corrercmdA
y, si falla, corrercmdB
. Estoy preguntando qué bien hace en este contexto.pushd
sin argumentos significa "intercambiar los dos elementos superiores en la pila de directorios"; falla si el directorio actual es el único elemento en la pila de directorios. En ese caso,popd
fallará también.pushd
ypopd
.pushd || popd
para alternar entre directorios:pushd
sin argumentos solo hace esto.cd -
existe explícitamente únicamente para volver al último directorio. Además, la pregunta solicitaba la ventaja depushd
overcd -
, mientras que esta respuesta claramente no proporciona más que una desventaja: más tipeo.|| popd
alternar? Por favor explique. (¿No es solo lo suficiente?)cd -
para alternar entre dos directorios. Además,cd
sin argumentos vuelve a su directorio de inicio.En pocas palabras, cuando necesita navegar entre más de 2 directorios, generalmente varias veces hacia adelante y hacia atrás, ya que
cd -
simplemente no lo cortará con nada más que 2 carpetas.Entonces, por ejemplo, en lugar de intentar volver a encontrar caminos largos anteriores mirando el historial de su búfer o completando una ruta larga, simplemente apila los importantes y, si es necesario, se mueve convenientemente a ellos solo por su número. La rotación entre estructuras de directorios complejas y rutas largas se vuelve resbaladiza y rápida.
Los builtins también le permiten reordenar la pila o desplegar 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.
fuente
El uso de dirs / popd / pushd me pareció un poco incómodo. Se me ocurrió mi solución personal en tcsh, agregando el siguiente código en .alias
de esta manera 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; "casa." 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, por ejemplo, ownCloud) en lugar de ~ / .mydir $ b, obtendrá una forma inteligente de usar sus directorios preferidos en diferentes cuentas y máquinas.
fuente
me ayuda a saltar entre los directorios a los más recientes utilizados en mi terminal. :-) Espero que te ayude a usar pushd en lugar de popd, uso cd ~ número apilado
fuente
Usar
cd
y lecd -
permite alternar solo entre los dos directorios utilizados más recientemente. El tamaño de su "conjunto de trabajo de directorio" es dos.Utilizando
pushd
, puede mantener un número arbitrariamente grande de directorios en su conjunto de trabajo.Yo uso la
pushd
mayor parte del tiempo en lugar decd
. Una vez que haya creado una pila de directorios activos conpushd directory_name
, puede saltar entre ellos todo el día conpushd ~#
.popd
Raramente lo uso , solo cuando quiero eliminar un directorio de la pila cuando sé que he terminado de usar ese directorio.Vaya al directorio y quítelo de la pila:
Permanezca en el directorio actual y elimine otro directorio de la pila:
Termina 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á trabajando activamente), 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:
Ejemplos:
En
tcsh
(pero nobash
), incluso puede guardar su pila de directorios en un archivo y restaurarlo más tarde.Salvar:
Restaurar:
De lo contrario, simplemente reemplace
~
en losbash
ejemplos con=
para usar entcsh
.fuente
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
¡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)
Vamos a navegar hacia atrás ahora:
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á:
Ahora puede hacer cualquier operación de Linux que implique directorios utilizando el índice de pila:
Incluso puede eliminar una entrada específica de la pila de directorios:
¡Espero que usar las palabras "documentar" o pensar en la pila de directorios como una especie de Db simplifique el concepto!
fuente