簡體   English   中英

如何在 OS X El Capitan 中禁用 Bash 會話

[英]How can I disable Bash sessions in OS X El Capitan

OS X El Capitan (10.11 Beta) 中一個看似新的功能是 Bash 會話(終端會話) 我現在有一個包含歷史文件的~/.bash_sessions目錄,並且我的HISTFILEHISTIGNORE環境被覆蓋。 如何禁用所有這些功能?

如果您手動啟動一個新的 Bash 會話(即bash -xl ),您可以看到登錄時運行的內容。

您將在輸出中看到以下行:

....
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']'

您可以在您的主目錄中創建一個.bash_sessions_disable文件來禁用此功能。

此行為在/etc/bashrc_Apple_Terminal定義。 它包含描述它做什么以及如何定制它的文檔注釋。

您可以通過在~/.bashrc腳本中設置SHELL_SESSION_HISTORY=0來禁用 per-terminal-session 命令歷史記錄功能,如下所述:

您可以通過將 SHELL_SESSION_HISTORY 設置為 0 來禁用此行為並共享單個歷史記錄。有一些常見的用戶自定義設置通過在每個提示處操作歷史記錄來安排在運行的 shell 之間共享新命令,它們通常包括“shopt -s histappend”; 因此,如果啟用了 histappend shell 選項,則默認情況下會禁用每個會話的歷史記錄。 您可以通過將 SHELL_SESSION_HISTORY 設置為 1 來顯式啟用它。

請注意,雖然您可以通過創建~/.bash_sessions_disable來禁用整個會話狀態恢復機制,但這~/.bash_sessions_disable為了禁用每個會話的命令歷史記錄功能,因此不推薦這樣做。

總而言之,這與 Apple 的Resume功能有關。 啟用此功能后,當您退出應用程序或重新啟動時,應用程序下次打開時將打開之前打開的窗口。

關於終端,必須做好三件事才能做到這一點:

  1. $HOME/.bash_sessions_disable不得存在
  2. System Preferences/General/Close Windows when quitting an app不得選中System Preferences/General/Close Windows when quitting an app
  3. 重新啟動時,選擇Reopen windows

當您重新打開終端時,它將重新打開您之前在相同屏幕位置擁有的相同窗口和選項卡。 此外,如果您已選中Terminal/Preferences/your-window-type/Windows/Resume/Restore-text-when-reopening-windows ,它將恢復每個屏幕上的文本。

最后,這與 OP 的問題特別相關,如果滿足以下條件,它將恢復每個窗口/選項卡中的歷史記錄:

  1. SHELL_SESSION_HISTORY未設置或設置為 1
  2. shopt histappend未設置
  3. 未設置HISTTIMEFORMAT

如果在.bashrc SHELL_SESSION_HISTORY顯式設置為 1,則最后兩個要求將被覆蓋,即可以設置shopt histappend HISTTIMEFORMATHISTTIMEFORMAT

此外,需要注意HISTSIZEHISTFILESIZE變量。 它們不應太大或太小,有些人建議不要設置它們,以便它們采用 Apple 的默認值。

到目前為止,關於這個主題的所有文章都是准確和有用的,並且應該使用已經提到的技術來代替它。 我將提到一種完全核方法,只是為了娛樂性的替代方案,並進一步擴大對這個主題的理解。

我獲得這些知識的唯一原因僅僅是因為我正在尋找需要創建~/.bash_sessions_disable文件的替代解決方案; 我寧願通過向我現有的~/.bash_profile添加一些行來阻止會話行為的發生。 不幸的是,不去核是不可能的,所以官方的答案仍然是最好的方法。

概括

當 Bash 首次在 MacOS 上啟動時,它會首先獲取/etc/profile ,然后獲取/etc/bashrc 該文件的內容包括這一行:

[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"

$TERM_PROGRAM環境變量僅由 Apple 的終端應用程序設置。 打印該變量的值會返回Apple_Terminal 換句話說, /etc/bashrc文件試圖獲取/etc/bashrc_Apple_Terminal文件(如果它既存在又可讀)。 正是在這個文件中,MacOS 執行其特殊的 Bash 會話處理以與操作系統的 Resume 功能聯系起來。

畢竟,Bash 將獲取用戶在其主目錄中的任何配置(如~/.bash_profile~/.bashrc )。 話雖如此,如果不執行其他人提到的操作(即將$SHELL_SESSION_HISTORY設置為0 ),就無法在純粹的配置級別(與配置創建新文件相比)覆蓋/etc/bashrc_Apple_Terminal文件中完成的所有工作消除基於會話的歷史記錄,並創建一個~/.bash_sessions_disable以防止每次啟動 Apple 終端時創建.bash_sessions目錄。

核方法

消除任何這種新的 MacOS 功能的兩種可能的替代方法是:1) 從/etc/bashrc文件中刪除最后一行,或 2) 將/etc/bashrc_Apple_Terminal重命名或刪除為其他內容。

這樣做之后,Apple 的終端應用程序的行為將不再與非 Apple 終端模擬器不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM