21 votos

¿Cómo persisten las sesiones de terminal de OS X a través de reinicios?

Siendo un ávido usuario de Linux antes de comprar un MacBook Pro, que suelen tener varias terminal de pestañas abiertas en cualquier momento.

En el pasado, se bloquea y se reinicia en general, la basura de mi flujo de trabajo, y la mayoría de mi ficha correspondiente historias. He buscado la manera de resolver este problema, pero siempre vino vacías; además de diversas técnicas que utilizan combinaciones de herramientas como ssh, screen, tmux, y requiere de un servidor privado virtual (o similar).

Una de mis cosas favoritas sobre el uso de mi MacBook Pro para escribir secuencias de comandos, y el uso de herramientas de línea de comandos, etc; es que mi terminal sesiones persisten más allá se bloquea y se reinicia de forma predeterminada. De hecho, la he restaurado una copia de seguridad desde hace casi 2 años, y cuando me conecté por primera vez, me he presentado con mi viejo escritorio y tres bash conchas que compone un proyecto en el que yo estaba trabajando en todo lo que hace.

Me gustaría saber cómo OS X hace posible esta característica. ¿Alguien aquí tiene una idea de cómo funciona?

15voto

El código para restaurar Terminal (en realidad bash sesiones) es parte de /etc/bashrc_Apple_Terminal que obtiene a través de /etc/profile y /etc/bashrc bash sesión en ejecución en Terminal.

 # Resume Support: Save/Restore Shell State
#
# Terminal assigns each terminal session a unique identifier and
# communicates it via the TERM_SESSION_ID environment variable so that
# programs running in a terminal can save/restore application-specific
# state when quitting and restarting Terminal with Resume enabled.
#
# The following code defines a shell save/restore mechanism. Users can
# add custom state by defining a shell_session_save_user_state function
# that writes restoration commands to the session file at exit. e.g.,
# to save a variable:
#
#   shell_session_save_user_state() { echo MY_VAR="'$MY_VAR'" >> "$SHELL_SESSION_FILE"; }
#
# During shell startup the session file is executed. Old files are
# periodically deleted.
#
# The default behavior arranges to save and restore the bash command
# history independently for each restored terminal session. It also
# merges commands into the global history for new sessions. Because
# of this it is recommended that you set HISTSIZE and HISTFILESIZE to
# larger values.
#
# You may disable this behavior and share a single history by setting
# SHELL_SESSION_HISTORY to 0. There are some common user customizations
# that arrange to share new commands among running shells by
# manipulating the history at each prompt, and they typically include
# 'shopt -s histappend'; therefore, if the histappend shell option is
# enabled, per-session history is disabled by default. You may
# explicitly enable it by setting SHELL_SESSION_HISTORY to 1.
#
# The implementation of per-session command histories in combination
# with a shared global command history is incompatible with the
# HISTTIMEFORMAT variable--the timestamps are applied inconsistently
# to different parts of the history; therefore, if HISTTIMEFORMAT is
# defined, per-session history is disabled by default.
#
# Note that this uses PROMPT_COMMAND to enable per-session history
# the first time for each new session. If you customize PROMPT_COMMAND
# be sure to include the previous value. e.g.,
#
#   PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"
#
# Otherwise, the per-session history won't take effect until the first
# restore.
#
# The save/restore mechanism is disabled if the following file exists:
#
#   ~/.bash_sessions_disable
 

9voto

Wyzard Puntos 144

Por lo que puedo decir, sólo guarda el texto en el búfer de scrollback de cada ventana. En realidad no guarda el estado de lo que estaba funcionando en las terminales; Sólo comienza un nuevo shell después del reinicio.

Como experimento, defina una variable en su shell y compruebe su valor:

 foo=bar
echo $foo
 

A continuación, reinicie y vuelva a comprobar el valor de la variable. Verá que ya no se define.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X