OS X El Capitan (10.11 Beta) 中一个看似新的功能是 Bash 会话(终端会话)。我现在有一个~/.bash_sessions
包含历史文件的目录,并且我的HISTFILE
和HISTIGNORE
envars 正在被覆盖。如何禁用所有这些功能?
4 回答
如果您手动启动一个新的 Bash 会话(即bash -xl
),您可以看到登录时运行的内容。
您将在输出中看到以下行:
....
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']'
您可以在主目录中创建一个.bash_sessions_disable
文件来禁用此功能。
此行为在 中定义/etc/bashrc_Apple_Terminal
。它包含描述它的作用以及如何定制它的文档注释。
SHELL_SESSION_HISTORY=0
您可以通过在~/.bashrc
脚本中设置来禁用 per-terminal-session 命令历史记录功能,如下所述:
您可以通过将 SHELL_SESSION_HISTORY 设置为 0 来禁用此行为并共享单个历史记录。有一些常见的用户自定义设置通过在每个提示符处操作历史记录来安排在运行的 shell 之间共享新命令,它们通常包括“shopt -s histappend”;因此,如果启用 histappend shell 选项,则默认情况下禁用每个会话的历史记录。您可以通过将 SHELL_SESSION_HISTORY 设置为 1 来显式启用它。
请注意,虽然您可以通过创建来禁用整个会话状态恢复机制~/.bash_sessions_disable
,但这只是为了禁用每个会话的命令历史功能是不必要的,因此不建议这样做。
总而言之,这与 Apple 的Resume功能有关。启用此功能后,当您退出应用程序或重新启动时,该应用程序下次打开时将打开之前打开的窗口。
关于终端,要做到这一点,必须具备三件事:
$HOME/.bash_sessions_disable
不得在场_System Preferences/General/Close Windows when quitting an app
不得检查。- 重新启动时,选择
Reopen windows
。
当您重新打开终端时,它将重新打开您之前在相同屏幕位置的相同窗口和选项卡。此外,如果您选中Terminal/Preferences/your-window-type/Windows/Resume/Restore-text-when-reopening-windows
,它将恢复每个屏幕上的文本。
最后,这与 OP 的问题特别相关,如果满足以下条件,它将恢复每个窗口/选项卡中的历史记录:
SHELL_SESSION_HISTORY
未设置或设置为 1shopt histappend
未设置HISTTIMEFORMAT
未设置
如果SHELL_SESSION_HISTORY
在 中显式设置为 1 .bashrc
,则最后两个要求将被覆盖,也就是说,shopt histappend
或者HISTTIMEFORMAT
可以设置。
此外,需要注意HISTSIZE
和HISTFILESIZE
变量。它们不应该太大或太小,有些人建议不要设置它们,以便它们采用 Apple 的默认值。
到目前为止,关于这个主题的所有内容都是准确和有用的,应该使用已经提到的技术来代替它。我将提到一种完全核方法,只是为了有趣的替代方案,也为了扩大对这个主题的进一步理解。
我获得这些知识的唯一原因仅仅是因为我正在寻找需要创建~/.bash_sessions_disable
文件的替代解决方案;相反,我宁愿通过在我现有的~/.bash_profile
. 不幸的是,如果不去核,这是不可能的,所以官方的回答仍然是最好的方法。
概括
当 Bash 在 MacOS 上首次启动时,它将首先 source /etc/profile
,然后再 source /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
or ~/.bashrc
)。话虽如此,如果不执行其他人提到的操作,即设置为消除基于会话的历史记录,就无法在纯配置级别(相对于配置和创建新文件)覆盖文件/etc/bashrc_Apple_Terminal
中完成的所有工作,并创建一个以防止每次启动 Apple 终端时创建目录。$SHELL_SESSION_HISTORY
0
~/.bash_sessions_disable
.bash_sessions
核方法
消除任何这种新 MacOS 功能的两种可能的替代方法是:1)从/etc/bashrc
文件中删除最后一行,或 2)重命名或删除/etc/bashrc_Apple_Terminal
其他内容。
完成此操作后,Apple 的终端应用程序的行为将不再与非 Apple 终端模拟器不同。