Cómo hacer que Mac Terminal restaure los directorios de trabajo al reiniciar

16

Utilizo el Terminal Mac con un puñado de pestañas asignadas a un directorio de trabajo diferente. Lo configuré para abrir nuevas ventanas con el mismo directorio de trabajo. Sin embargo, cuando salgo de Terminal y lo reinicio, reconstruye todas las pestañas, sus nombres, incluso me muestra el último resultado en la ventana, pero permanece en el directorio de inicio del usuario y no restaura el último directorio de trabajo de cada pestaña.

¿Qué estoy haciendo mal? ¿Puede esto ser causado por algún ajuste en el ~/.bash_profile?

Oliver Drotbohm
fuente
Creo que puedes encontrar lo que estás buscando en este hilo. apple.stackexchange.com/questions/863/…
dhempler
1
Entonces, ¿me equivoco al suponer que esto debería ser compatible de inmediato?
Oliver Drotbohm

Respuestas:

15

(Como referencia, estamos hablando de la función de Reanudar de Mac OS X Lion 10.7 y posterior).

Terminal restaura automáticamente el directorio de trabajo si está utilizando el shell predeterminado, bash. Si está utilizando otro shell, necesitará adaptar el código /etc/bashrcpara enviar una secuencia de escape para comunicar el directorio de trabajo a la Terminal para que pueda restaurar el directorio más tarde para Reanudar. Si está usando zsh, vea mi respuesta para Reanudar Zsh-Terminal (OS X Lion) , en el que incluyo el código apropiado para zsh.

Si tiene una costumbre ~/.bash_profileo ~/.bashrcpuede que necesite asegurarse de no deshacer el comportamiento predeterminado modificando /etc/bashrclas personalizaciones. En particular, establece la PROMPT_COMMANDvariable de entorno para enviar la secuencia de escape en cada solicitud. Si personaliza esa variable, deberá prefijar o agregar su código al valor actual, por ejemplo:

PROMPT_COMMAND="<your code here>;$PROMPT_COMMAND"

Además, en general, ~/.bash_profiledebe ejecutar ~/.bashrc:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
Chris Page
fuente
1
Gracias por la respuesta, pero parece que no puedo hacer que funcione. He eliminado mi .bashrc(aunque no pude detectar ninguna personalización de comando rápido. Ahora hago lo siguiente: 1. Abra una nueva ventana de Terminal (se abre en el directorio de inicio de mi usuario) 2. Documentos de CD 3. Salga de la Terminal 4. Abra la Terminal 5 La ventana se vuelve a abrir mostrando la salida de cambio de directorio pero aún se encuentra en el directorio de inicio del usuario.
Oliver Drotbohm
@OliverGierke Terminal crea shells de entrada, por lo que también comprobar si hay ~/.bash_profile, ~/.bash_loginy ~/.profile.
Chris Page
No tengo los dos últimos, el primero ahora se ejecuta ~/.bashrcsegún su sugerencia en su respuesta.
Oliver Drotbohm
2
Lo entendí, Chris. Mi /etc/bashrcparece haber sido modificado por un script de instalación o lo que sea. Hubo una /etc/bashrc.origque contenía alguna configuración adicional (que supongo que es la configuración original) gist.github.com/3273170 . Vuelva a agregar eso a las /etc/bashrccosas hechas funcionando como se esperaba nuevamente. Muchas gracias por ayuda y paciencia!
Oliver Drotbohm
No cambio el $ PROMPT_COMMAND en mi .bashrc y solo tengo el sistema predeterminado / etc / bashrc. ¿Alguna sugerencia adicional?
Richard
3

Si está utilizando Bash-It, puede encontrarse con el problema de $PROMPT_COMMANDser sobrescrito por él.

Como se mencionó, OS X lo utiliza para restaurar cwd en nuevas pestañas. Bash debería agregar valores, no anularlos.

Pero una solución alternativa por ahora sería agregar la siguiente línea a su ~/.bash_profile

source $BASH_IT/bash_it.sh
export PROMPT_COMMAND="$PROMPT_COMMAND;update_terminal_cwd;"

Para obtener más información, consulte el rastreador de problemas para actualizaciones: https://github.com/revans/bash-it/issues/240

Y la referencia de Apple para ello https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html

Michael Yagudaev
fuente
1

Escribí una publicación de blog sobre cómo hacer esto para csh / tcsh antes de descubrir esta respuesta; Si alguien más viene aquí buscando una solución para esos proyectiles, aquí está:

if ("$?TERM_PROGRAM") then
  if ("$TERM_PROGRAM" == "Apple_Terminal") then
    alias precmd 'printf "\033]7;%s\a" "file://$host$cwd:ags/ /%20/"'
  endif
endif

Agregue eso a su .cshrco .tcshrcsegún corresponda. (La declaración if externa es necesaria para evitar un error al iniciar sesión de forma remota, como con ssh. Tiene que ser una declaración separada debido a las reglas de expansión variable en tcsh).

Al igual que el soporte de bash incorporado de Apple, esta solución no utiliza ningún programa externo que no sea printf, a costa de solo escapar de espacios. Si necesita escapar de otros personajes especiales, tendrá que trabajar un poco más para encontrar una solución más completa.

rsfinn
fuente