Làm thế nào để các phiên thiết bị đầu cuối OS X vẫn tồn tại thông qua khởi động lại?


14

Là một người dùng Linux khao khát trước khi mua MacBook Pro, tôi thường có một số tab thiết bị đầu cuối mở bất cứ lúc nào.

Trong quá khứ, các sự cố và khởi động lại thường làm hỏng quy trình làm việc của tôi và phần lớn lịch sử tab tương ứng của tôi. Tôi đã tìm cách để giải quyết vấn đề này nhưng luôn luôn trống rỗng; ngoài các kỹ thuật khác nhau mà kết hợp sử dụng các công cụ thích ssh, screen, tmux, và yêu cầu một máy chủ riêng ảo (hoặc tương đương).

Một trong những điều yêu thích của tôi về việc sử dụng MacBook Pro để viết tập lệnh và sử dụng các công cụ CLI, v.v; là các phiên cuối của tôi vẫn tồn tại ngoài sự cố và khởi động lại theo mặc định. Trên thực tế, tôi mới khôi phục bản sao lưu từ gần 2 năm trước và khi tôi đăng nhập lần đầu tiên, tôi đã được tặng một chiếc máy tính để bàn cũ và ba bashvỏ bao gồm một dự án mà tôi đang làm việc trong suốt thời gian đó.

Tôi muốn biết làm thế nào OS X làm cho tính năng này có thể. Có ai ở đây có cái nhìn sâu sắc về cách thức hoạt động?

Câu trả lời:


10

Mã để khôi phục Terminal (thực sự là bashcác phiên) là một phần trong /etc/bashrc_Apple_Terminalđó được lấy nguồn qua /etc/profile/etc/bashrccho mỗi bashphiên chạy trong 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

1
Thật tuyệt, vậy những bình luận này là từ /etc/bashrc_Apple_Terminalđâu? Tôi đặc biệt thích điều # 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.đó Đó là điều khác mà tôi đã cố gắng thực hiện trước đây, nhưng không có kết quả.
tiếng nói

Vì vậy, dù sao tôi cũng muốn đánh dấu đây là câu trả lời, nhưng tôi đã đọc qua tệp này và .. bạn có thể chỉ ra các dòng mã cụ thể gây ra hiệu ứng này không? Dường như có nhiều điều hơn là chỉ các chức năng được đề cập trong các bình luận. Nó chỉ có thể là đôi mắt mệt mỏi của tôi, nhưng tôi không thể hiểu nhiều về nó.
lên tiếng

@ tjt263 Chưa bao giờ có thời gian để tìm ra điều đó
nohillside

@ tjt263 Đó là tất cả mọi thứ từ bình luận cho đến cuối tập tin. Về cơ bản, nó sử dụng trapđể bắt hết phiên và lưu trữ lịch sử của nó trong một tệp cụ thể của tab / phiên.
nohillside

7

Theo như tôi có thể nói, nó chỉ lưu văn bản trong bộ đệm cuộn của mỗi cửa sổ. Nó không thực sự lưu trạng thái của những gì đang chạy trong thiết bị đầu cuối; nó chỉ bắt đầu một shell mới sau khi khởi động lại.

Là một thử nghiệm, xác định một biến trong vỏ của bạn và kiểm tra giá trị của nó:

foo=bar
echo $foo

Sau đó khởi động lại và kiểm tra lại giá trị của biến. Bạn sẽ thấy rằng nó không còn được xác định.


Phù! Điều đó sẽ là đáng sợ nếu không.
uhoh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.