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

13

Uso la Terminal de Mac con una mano llena de pestañas cada una asignada a un directorio de trabajo diferente. Lo he configurado para abrir nuevas ventanas con el mismo directorio de trabajo. Sin embargo, cuando salgo de Terminal y lo reinicio, se reconstruyen todas las pestañas, sus nombres, incluso me muestran la última salida de la ventana, pero permanecen en el directorio de inicio del usuario y no restauran el directorio de trabajo más reciente de cada pestaña.

¿Qué estoy haciendo mal? ¿Puede ser causado por alguna configuración en el ~/.bash_profile ?

    
pregunta Oliver Drotbohm 27.04.2012 - 08:23

3 respuestas

12

(Para referencia, estamos hablando de la función Reanudar de Mac OS X Lion 10.7 y versiones posteriores).

El terminal restaura automáticamente el directorio de trabajo si estás usando el shell predeterminado, bash. Si está utilizando algún otro shell, deberá adaptar el código en /etc/bashrc para 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 a Reanudar Zsh-Terminal (OS X Lion) , en la que incluyo el código apropiado para zsh.

Si tienes un ~/.bash_profile o ~/.bashrc personalizado, es posible que debas asegurarte de no deshacer el comportamiento predeterminado al modificar las personalizaciones de /etc/bashrc . En particular, establece la variable de entorno PROMPT_COMMAND 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, generalmente, ~/.bash_profile debería ejecutar ~/.bashrc :

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
    
respondido por el Chris Page 03.05.2012 - 09:24
2

Si estás usando Bash-It, puedes encontrar el problema de que $PROMPT_COMMAND haya sido sobrescrito por él.

Como se mencionó anteriormente, 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 las actualizaciones: enlace

Y la referencia de Apple para ello. enlace

    
respondido por el Michael Yagudaev 13.01.2014 - 01:03
0

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

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

Agregue eso a su .cshrc o .tcshrc segú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 de variables en tcsh).

Al igual que el soporte de bash integrado de Apple, esta solución no utiliza programas externos que no sean printf , al costo de los espacios que solo escapan. Si necesita escapar de otros caracteres especiales, tendrá que trabajar un poco más para encontrar una solución más completa.

    
respondido por el rsfinn 29.10.2013 - 18:15

Lea otras preguntas en las etiquetas