¿Cómo puedo abrir un nuevo terminal en el mismo directory del último usado desde un gestor de windows key?

Estoy usando un administrador de windows de mosaico y cambié de gnome-terminal con varias tabs a múltiples instancias de urxvt gestionadas por el administrador de windows. Una de las características que extraño es la capacidad de abrir un nuevo terminal que por defecto es el directory de trabajo del último.

En resumen: necesito una forma de abrir un nuevo urxvt (bash) que por defecto sea $ PWD del último usado.

La única solución que me viene a la mente es save la ruta actual en cada cd con algo como esto:

 echo $PWD > ~/.last_dir 

y restaurar la ruta en la nueva terminal de esta manera:

 cd `cat ~/.last_dir` 

Puedo get el segundo command en .bashrc pero no sé cómo ejecutar el primero en cada cambio de directory 🙂

Cualquier solución más simple que no involucre el uso de screen o tmux es bienvenida.

Veo tres soluciones usando .last_dir . Puede colocar el echo $PWD > ~/.last_dir ya sea:

  1. En una function especial que sería un contenedor para cd :

     function cd_ { [[ -d "$@" ]] || return 1 echo "$@" > ~/.last_dir cd "$@" } 

    Coloque esto en su .bashrc y luego use cd_ lugar de cd cada vez que quiera que su nuevo directory de trabajo sea almacenado.

  2. En tu $PROMPT_COMMAND ( no recomendado ):

     PROMPT_COMMAND="$PROMPT_COMMAND; pwd > ~/.last_dir" 

    Puede probar esto directamente desde la terminal o colocarlo en .bashrc . Esta solución, sin embargo, desencadena la escritura de disco cada vez que aparece el post, lo que podría causar problemas, pero, por otro lado, .last_dir contendría el directory actual sin importar cómo llegaste allí.

  3. En una secuencia de commands personalizada de extensión perl para rxvt . Nunca he creado uno yo mismo, pero puedes encontrar bastantes ejemplos en la web.

Actualmente estoy usando esta versión de la solución n. ° 1

 # save path on cd function cd { builtin cd $@ pwd > ~/.last_dir } # restre last saved path if [ -f ~/.last_dir ] then cd `cat ~/.last_dir` fi 

dentro de mi .zshrc

Esto es realmente bastante trivial; si ejecuta urxvt desde su window urxvt existente, la nueva window estará en el mismo directory. He dup alias a urxvt & por esta razón. Si lo quiere ligado a una tecla de acceso directo, puede usar el command de vinculación de bash. Por ejemplo, para vincularlo a F1 :

 $ bind '"\e[11~": "urxvt &\n"' 

Por supuesto, es un enfoque de trabajo para modificar el comportamiento del cd , pero me gustaría mostrar una solución más simple. En el hombre bash (1) encontré que si un bash interactivo sale, ejecuta ~/.bash_logout si existe. Por lo tanto, en lugar de almacenar la ruta en cada invocación de cd la última ruta se puede save al salir.

Mi ~/.bash_logout es muy simple:

 echo $PWD >~/.lastdir 

Y en algún lugar de mi .bashrc coloqué esta línea:

 [ -r ~/.lastdir ] && cd $(<~/.lastdir) 

¡Espero que esto ayude un poco!

Solo agrega . /etc/profile.d/vte.sh en su ~/.bashrc para get la misma característica

Muy a menudo uso múltiples windows de terminal a la vez, cada una con múltiples tabs en ella. Por ejemplo: una window para tabs de desarrollo de código fuente, una window para files de látex, una window para ejecución R y scripts, etc. Dentro de una window, quiero que una nueva terminal con tabs cambie al directory que se usó por última vez en esa window particular (Esto solía funcionar en el pasado, pero con la nueva versión de gnome, de alguna manera no es así). La siguiente solución sucia funciona bien para mí. He puesto esto en .bashrc.

 dirfilename="/tmp/.lastdir-$WINDOWID" [ -r "$dirfilename" ] && { savdir=`cat $dirfilename` cd "$savdir" } function cd () { builtin cd "$@" echo $PWD > $dirfilename }