2015-09-05 115 views
31

OS X El Capitan(10.11 Beta)is Bash sessions (Terminal sessions)中的一個看似新功能。我現在有一個帶有歷史記錄文件的~/.bash_sessions目錄,並且我的HISTFILEHISTIGNORE envars被覆蓋。我如何禁用所有這些功能?如何禁用OS X中的Bash會話El Capitan

+1

「...我的... HISTIGNORE envars被覆蓋。」你確定嗎? '/ etc/bashrc_Apple_Terminal'不會改變'HISTIGNORE'(它根本沒有被引用)。 –

+1

*如果啓用'histappend' shell選項,默認情況下每會話歷史記錄被禁用* – yckart

回答

40

如果您手動啓動新的Bash會話(即bash -xl),您可以看到登錄時運行的是什麼。

你會看到下面的行輸出:

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

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

+0

我喜歡能夠訪問比以前更多的歷史記錄,但它是否會對其本身施加任何限制?看起來像自安裝10.11以來,每個終端調用都有兩個或三個文件。每月只有兩兆字節,但仍然...... – WGroleau

+0

@WGroleau:這個功能不是關於歷史數量,而是關於爲每個終端會話存儲單獨的命令歷史記錄,以便如果您使用簡歷恢復終端,歷史將保持獨立就像他們最初創造它們時一樣。通常的'HISTSIZE'和'HISTFILESIZE' shell變量仍然適用。實際上,建議您將它們中的一個或兩個放大,因爲每個會話都會將其歷史記錄追加到全局'〜/ .bash_history'文件中,以便您可以在新終端中使用所有歷史記錄。有關更多詳細信息,請參見'/ etc/bashrc_Apple_Terminal'中的註釋。 –

+0

@WGroleau:它也會自動刪除超過兩週的會話文件,每天一次。 –

22

此行爲在/etc/bashrc_Apple_Terminal中定義。它包含描述它做什麼以及如何定製它的文檔註釋。

你可以在你的~/.bashrc腳本設置SHELL_SESSION_HISTORY=0禁用每個終端會話命令歷史記錄功能,如下所述:

您可以禁止此行爲,並共享一個歷史的 SHELL_SESSION_HISTORY設置爲0 。有一些常見的用戶定製 ,它們安排在運行的shell之間共享新的命令,由 在每個提示處操縱歷史記錄,它們通常包括 'shopt -s histappend';因此,如果histappend shell選項啓用了 ,則默認情況下會禁用每個會話歷史記錄。您可以 明確設置SHELL_SESSION_HISTORY使它1.

需要注意的是,雖然你可以通過創建~/.bash_sessions_disable禁用整個會話狀態恢復機制,這是不必要的只是禁用每個會話的命令歷史功能,不建議使用。

+1

很好找!但是通過'/ etc/bashrc_Apple_Terminal'查看,我相信完全禁止該功能的唯一方法是設置''$ HOME/.bash_sessions_disable'「(也就是說,沒有該文件,它仍然會創建會話目錄)。 – Whymarrh

+0

@Whymarrh你錯過了我的答案的一部分?我說那個文件會禁用會話狀態機制 - 但是如果你想要做的就是禁用每個會話的shell命令歷史,那就太過分了。 –

+1

看起來我誤解了最後一行,是的。對於那個很抱歉。 – Whymarrh

6

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

關於終端,三件事情必須到位要做到這一點:

  1. $HOME/.bash_sessions_disable必須存在
  2. 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未設置

如果SHELL_SESSION_HISTORY顯式設置爲1 .bashrc,最後兩項要求被覆蓋,即可以設置shopt histappendHISTTIMEFORMAT

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

相關問題