OS X terminal oturumları yeniden başlatmalarla nasıl devam eder?


14

Bir MacBook Pro'yu satın almadan önce hevesli bir Linux kullanıcısı olarak, genellikle aynı anda birkaç terminal sekmesi açıyorum.

Geçmişte, çökmeler ve yeniden başlatmalar genellikle iş akışımı ve ilgili sekme geçmişlerimin çoğunu çöpe atardı. Bu sorunu çözmenin yollarını aradım ama her zaman boş oldum; yana çeşitli teknikler ile ilgili araçların kullanıldığı kombinasyonlar gibi bu ssh, screen, tmuxve bir sanal özel sunucu gerekli (veya benzeri).

Komut dosyaları yazmak için MacBook Pro'yu kullanma ve CLI araçlarını kullanma vb. İle ilgili en sevdiğim şeylerden biri; terminal oturumlarımın varsayılan olarak çökme ve yeniden başlatmanın ötesinde kalması. Aslında, neredeyse 2 yıl önce bir yedeği geri yükledim ve ilk kez giriş yaptığımda, eski masaüstüm ve basho zaman önce üzerinde çalıştığım bir projeyi içeren üç mermi bana sunuldu .

OS X'in bu özelliği nasıl mümkün kıldığını bilmek istiyorum. Buradaki herhangi birinin nasıl çalıştığı hakkında bir fikri var mı?

Yanıtlar:


10

Terminal'i (aslında bashoturumlar) geri yükleme kodu , bir kısmı Terminal'de çalışan her oturum için ve /etc/bashrc_Apple_Terminalbunlardan kaynaklanır ./etc/profile/etc/bashrcbash

# 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

1
Güzel, öyleyse bu yorumlar /etc/bashrc_Apple_Terminal? Özellikle bunu beğendim # 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.Daha önce uygulamaya çalıştığım başka bir şey, ama boşuna.
dile

Her neyse, bunu cevap olarak işaretlemek istiyorum, ama bu dosyayı okuyorum ve .. bu etkiye neden olan belirli kod satırlarını gösterebilir misiniz? Sadece yorumlarda bahsedilen işlevlerden daha fazlası var gibi görünüyor. Sadece yorgun gözlerim olabilir, ama pek anlam ifade edemiyorum.
dile

@ tjt263 Henüz anlamaya zaman bulamadım
nohillside

@ tjt263 Aslında dosyanın sonuna kadar açıklamadan her şey. Temel trapolarak bir oturumun sonunu yakalamak ve geçmişini sekmeye / oturuma özgü bir dosyada saklamak için kullanılır.
nohillside

7

Anlayabildiğim kadarıyla, metni her pencerenin geri kaydırma arabelleğine kaydeder. Aslında terminallerde nelerin çalıştığını kaydetmez; yeniden başlattıktan sonra yeni bir kabuk başlatır.

Deneme olarak, kabuğunuzda bir değişken tanımlayın ve değerini kontrol edin:

foo=bar
echo $foo

Sonra yeniden başlatın ve değişkenin değerini tekrar kontrol edin. Artık tanımlanmadığını göreceksiniz.


Whew! Aksi takdirde ürpertici olurdu.
uhoh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.