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?


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

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


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.

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.