在OS X El Capitan (10.11 Beta)中,似乎有一个新的功能 Bash会话(Terminal会话)。我现在有一个
~/.bash_sessions
目录,其中包含历史文件,我的HISTFILE
和HISTIGNORE
环境变量被覆盖了。我该如何禁用所有这些功能?~/.bash_sessions
目录,其中包含历史文件,我的HISTFILE
和HISTIGNORE
环境变量被覆盖了。我该如何禁用所有这些功能?如果您手动启动一个新的Bash会话(即bash -xl
),您可以查看登录时运行的内容。
您将在输出中看到以下行:
....
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']'
您可以在主目录中创建一个.bash_sessions_disable
文件来禁用此功能。
HISTSIZE
和HISTFILESIZE
shell变量仍然适用。实际上,建议您将其中一个或两个变量设置得更大,因为每个会话还会将其历史记录附加到全局的~/.bash_history
文件中,因此您的所有历史记录都可以在新的终端中使用。有关详细信息,请参见/etc/bashrc_Apple_Terminal
中的注释。 - Chris Page/etc/bashrc_Apple_Terminal
中查看。 如果您看到两周以上的文件,请提交错误报告。 如果您想控制它们保留的时间,请提交报告。 但是,如果您根本不想要每个终端会话的命令历史记录,则可以使用SHELL_SESSION_HISTORY = 0
关闭它,就像我在我的答案中描述的那样。 - Chris Page这种行为是在/etc/bashrc_Apple_Terminal
中定义的。它包含了描述其功能以及如何自定义的文档注释。
您可以通过在~/.bashrc
脚本中设置SHELL_SESSION_HISTORY=0
来禁用每个终端会话的命令历史记录功能,如此处所述:
您可以将SHELL_SESSION_HISTORY设置为0,从而禁用此行为并共享单个历史记录。有些常见的用户自定义会使用“shopt -s histappend”在每个提示符处操纵历史记录以在运行的shell间共享新命令;因此,如果启用了histappend shell选项,则默认情况下禁用每个会话的历史记录。您可以通过将SHELL_SESSION_HISTORY设置为1来明确启用它。
请注意,虽然您可以通过创建~/.bash_sessions_disable
来禁用整个会话状态恢复机制,但这不必要仅为了禁用每个会话的命令历史记录功能,并且不建议这样做。
/etc/bashrc_Apple_Terminal
让我相信,完全阻止该功能的唯一方法是设置"$HOME/.bash_sessions_disable"
(也就是说,如果没有该文件,它仍会创建会话目录)。 - Whymarrh$TERM_SESSION_ID
,$SHELL_SESSION_*
)和~/.bash_sessions
目录将不会被创建。只有在打开苹果的终端应用程序时,所有这些额外功能才会被创建。 - danemacmillan$HOME/.bash_sessions_disable
。
2. “系统偏好设置/一般/关闭应用程序时关闭窗口”必须未被选中。
3. 在重新启动时,选择重新打开窗口
。终端/首选项/您的窗口类型/窗口/恢复/重新打开窗口时恢复文本
,它将恢复每个屏幕上的文本。SHELL_SESSION_HISTORY
未设置或设置为1
2. 未设置shopt histappend
3. 未设置HISTTIMEFORMAT
如果在.bashrc
中显式设置了SHELL_SESSION_HISTORY
为1,则将覆盖最后两个要求,即可以设置shopt histappend
或HISTTIMEFORMAT
。HISTSIZE
和HISTFILESIZE
这两个变量。它们的值不应该过大或过小,有些人建议将它们设置为空,这样它们就会采用苹果的默认值。echo $HISTSIZE
和 echo $HISTFILESIZE
将显示您当前的设置。我的设置是 500
。 这些是默认值吗?如何 "取消设置" 将会是有帮助的信息。 - John[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
$TERM_PROGRAM
环境变量只能被苹果的终端应用程序设置。打印该变量的值将返回 Apple_Terminal
。换句话说,如果 /etc/bashrc_Apple_Terminal
文件存在且可读,则 /etc/bashrc
文件将尝试获取此文件的资源。在这个文件中,MacOS 执行其特殊的 Bash 会话处理以与操作系统的恢复功能相连接。~/.bash_profile
或 ~/.bashrc
)。尽管如此,在纯粹的配置级别上(而不是同时进行配置和创建新文件),没有办法覆盖在 /etc/bashrc_Apple_Terminal
文件中完成的所有工作,除非执行其他人提到的操作,即将 $SHELL_SESSION_HISTORY
设置为 0
以消除基于会话的历史记录,并创建 ~/.bash_sessions_disable
来防止每次启动 Apple 的终端时都创建 .bash_sessions
目录。
彻底做法
消除所有这些新的 MacOS 功能的两种可能替代方法要么是 1)从 /etc/bashrc
文件中删除最后一行,要么是 2)将 /etc/bashrc_Apple_Terminal
重命名或删除为其他名称。/etc/bashrc_Apple_Terminal
做的唯一一件事情就是恢复功能。终端会话到远程系统已经足够复杂了,Mac 的记录也不太好,我对它并没有太多信心,因此我花费了很少的时间完全禁用它,并且摆脱这些额外的东西干扰我的通常的 *nix 工作流程:sudo vim /etc/bashrc
并注释掉最后一行是一个不错的快速解决方案。叹气。再次自由了。(我看到有人说“不推荐”,哈哈,但没有给出理由) - NeilG
/etc/bashrc_Apple_Terminal
没有改变HISTIGNORE
(它根本没有被引用)。 - Chris Pagehistappend
shell选项,则默认情况下禁用每个会话的历史记录。 - yckart