directorio actual push / pop?


66

Con bash, ¿hay alguna manera de empujar y hacer estallar el directorio de trabajo actual? Intenté escribir bash;cd dir; ./dostuff;exit;pero el directorio actual es ahora dir.

linux  bash 

Respuestas:


91

Hay pushdypopd

Bash mantendrá un historial de los directorios que visite, solo tiene que preguntar. Bash almacena el historial en una pila y usa los comandos pushd y popd para administrar la pila.

Más para leer

Ejemplo:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me

1
Extracto del enlacepushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.
Jefe Maestro

31

La llamada bashinicia una nueva subshell, que tiene su propia entrada; ninguno de los otros comandos se ejecutará hasta que salga. Rodeando los comandos que se ejecutarán con parens también se iniciará una nueva subshell, pero ejecutará los comandos dentro de ella.

( cd dir ; ./dostuff )

1
¡Brillante! No es necesario presionar / saltar cuando la intención es simplemente ejecutar un comando en un directorio diferente (por ejemplo, actualizar una dependencia) y luego volver al actual.
Dan Dascalescu

12

Si no necesita múltiples niveles de historial de directorio, también puede hacer:

cd foo
# do your stuff in foo
cd -

En comparación con pushd/ popd, esto tiene la desventaja de que si cd foofalla, termina en el directorio incorrecto con cd -.

(Probablemente cd -sea ​​más útil fuera de los guiones. "Volvamos a donde estaba").


4

Utilizo el alias para realizar un seguimiento de los cambios de mi directorio, así que para 'cd' en algún lugar puedo volver a donde estaba usando 'cd.', O regresar dos usando 'cd ..', etc.

alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'

1
¿Puedes explicar con más detalle lo que hace este código?
bwDraco

Eso es inteligente. Tengo alias alrededor de mi pushd y popd para hacer algunas cosas que me gustan. Yo uso la pila de directorios todo el tiempo. Odio ver a la gente cd en alguna parte y luego retroceder buscando el directorio anterior para cortar y pegar. No puedo hacer la mayor parte de mi trabajo en mi directorio principal debido a las cuotas, por lo que tengo que usar el almacenamiento agrupado en la red.
Michael Mathews

1
¿Es el alias ..cdlo suficientemente robusto? parece que solo elimina los últimos 10 elementos de la pila.
reynoldsnlp
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.