如何在 OS X El Capitan 中禁用 Bash 会话
How can I disable Bash sessions in OS X El Capitan
OS X El Capitan(10.11 测试版)is Bash sessions (Terminal sessions) 中看似新的功能。我现在有一个包含历史文件的 ~/.bash_sessions
目录,我的 HISTFILE
和 HISTIGNORE
envars 被覆盖了。我怎样才能禁用所有这些功能?
如果您手动启动新的 Bash 会话(即 bash -xl
),您可以在登录时看到 运行 是什么。
您将在输出中看到以下行:
....
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']'
您可以在您的主目录中创建一个 .bash_sessions_disable
文件来禁用此功能。
此行为在 /etc/bashrc_Apple_Terminal
中定义。它包含描述它的作用以及如何自定义它的文档注释。
您可以通过在 ~/.bashrc
脚本中设置 SHELL_SESSION_HISTORY=0
来禁用 per-terminal-session 命令历史功能,如下所述:
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.
请注意,虽然您可以通过创建 ~/.bash_sessions_disable
来禁用整个 session-state 恢复机制,但仅禁用 per-session 命令历史功能是不必要的,因此不推荐这样做。
总而言之,这与 Apple 的 Resume 功能有关。启用此功能后,当您退出应用程序或重新启动时,应用程序下次打开时将打开之前打开的windows。
关于 Terminal,要做到这一点,必须准备好三件事:
$HOME/.bash_sessions_disable
必须不 在场
System Preferences/General/Close Windows when quitting an app
必须 不 被选中。
- 重新启动时,select
Reopen windows
。
当您重新打开终端时,它会重新打开相同的 windows 和您之前在相同屏幕位置的选项卡。此外,如果您已选中 Terminal/Preferences/your-window-type/Windows/Resume/Restore-text-when-reopening-windows
,它将恢复每个屏幕上的文本。
最后,这与 OP 的问题具体相关,如果满足以下条件,它将恢复每个 window/tab 中的历史记录:
SHELL_SESSION_HISTORY
未设置或设置为 1
shopt histappend
未设置
HISTTIMEFORMAT
未设置
如果SHELL_SESSION_HISTORY
在.bashrc
中明确设置为1,最后两个要求被覆盖,即可以设置shopt histappend
或HISTTIMEFORMAT
。
另外需要注意HISTSIZE
和HISTFILESIZE
两个变量。它们不应太大或太小,有些人建议不要设置它们,以便采用 Apple 的默认值。
到目前为止,关于这个主题的所有内容都是准确且有用的,应该使用已经提到的技术来代替它。我要提到一个完全核的方法,只是为了娱乐替代方案,同时也为了进一步扩展对这个主题的理解。
我获得这些知识的唯一原因仅仅是因为我正在寻找一种替代解决方案来需要创建一个 ~/.bash_sessions_disable
文件;相反,我宁愿通过向我现有的 ~/.bash_profile
添加一些行来防止会话行为的发生。不幸的是,如果不使用核能,那是不可能的,所以官方的答案仍然是最好的方法。
总结
当 Bash 首次在 MacOS 上启动时,它将首先获取 /etc/profile
,然后获取 /etc/bashrc
。该文件的内容包括这一行:
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
$TERM_PROGRAM
环境变量仅由 Apple 的终端应用设置。打印该变量的值 returns Apple_Terminal
。换句话说,如果 /etc/bashrc
文件存在且可读,它会尝试获取 /etc/bashrc_Apple_Terminal
文件。在这个文件中,MacOS 执行其特殊的 Bash 会话处理,以配合 OS.
的恢复功能
毕竟,Bash 将获取用户在其主目录中的任何配置(如 ~/.bash_profile
或 ~/.bashrc
)。话虽如此,如果不执行其他人已经提到,即将 $SHELL_SESSION_HISTORY
设置为 0
以消除基于会话的历史记录,并创建一个 ~/.bash_sessions_disable
以防止每次 Apple 的终端被创建 .bash_sessions
目录开始了。
核方法
消除任何此新 MacOS 功能的两种可能的替代方法是 1) 从 /etc/bashrc
文件中删除最后一行,或 2) 重命名或删除 /etc/bashrc_Apple_Terminal
到别的东西。
执行此操作后,Apple 终端应用程序的行为将不再与非 Apple 终端模拟器不同。
OS X El Capitan(10.11 测试版)is Bash sessions (Terminal sessions) 中看似新的功能。我现在有一个包含历史文件的 ~/.bash_sessions
目录,我的 HISTFILE
和 HISTIGNORE
envars 被覆盖了。我怎样才能禁用所有这些功能?
如果您手动启动新的 Bash 会话(即 bash -xl
),您可以在登录时看到 运行 是什么。
您将在输出中看到以下行:
....
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']'
您可以在您的主目录中创建一个 .bash_sessions_disable
文件来禁用此功能。
此行为在 /etc/bashrc_Apple_Terminal
中定义。它包含描述它的作用以及如何自定义它的文档注释。
您可以通过在 ~/.bashrc
脚本中设置 SHELL_SESSION_HISTORY=0
来禁用 per-terminal-session 命令历史功能,如下所述:
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.
请注意,虽然您可以通过创建 ~/.bash_sessions_disable
来禁用整个 session-state 恢复机制,但仅禁用 per-session 命令历史功能是不必要的,因此不推荐这样做。
总而言之,这与 Apple 的 Resume 功能有关。启用此功能后,当您退出应用程序或重新启动时,应用程序下次打开时将打开之前打开的windows。
关于 Terminal,要做到这一点,必须准备好三件事:
$HOME/.bash_sessions_disable
必须不 在场System Preferences/General/Close Windows when quitting an app
必须 不 被选中。- 重新启动时,select
Reopen windows
。
当您重新打开终端时,它会重新打开相同的 windows 和您之前在相同屏幕位置的选项卡。此外,如果您已选中 Terminal/Preferences/your-window-type/Windows/Resume/Restore-text-when-reopening-windows
,它将恢复每个屏幕上的文本。
最后,这与 OP 的问题具体相关,如果满足以下条件,它将恢复每个 window/tab 中的历史记录:
SHELL_SESSION_HISTORY
未设置或设置为 1shopt histappend
未设置HISTTIMEFORMAT
未设置
如果SHELL_SESSION_HISTORY
在.bashrc
中明确设置为1,最后两个要求被覆盖,即可以设置shopt histappend
或HISTTIMEFORMAT
。
另外需要注意HISTSIZE
和HISTFILESIZE
两个变量。它们不应太大或太小,有些人建议不要设置它们,以便采用 Apple 的默认值。
到目前为止,关于这个主题的所有内容都是准确且有用的,应该使用已经提到的技术来代替它。我要提到一个完全核的方法,只是为了娱乐替代方案,同时也为了进一步扩展对这个主题的理解。
我获得这些知识的唯一原因仅仅是因为我正在寻找一种替代解决方案来需要创建一个 ~/.bash_sessions_disable
文件;相反,我宁愿通过向我现有的 ~/.bash_profile
添加一些行来防止会话行为的发生。不幸的是,如果不使用核能,那是不可能的,所以官方的答案仍然是最好的方法。
总结
当 Bash 首次在 MacOS 上启动时,它将首先获取 /etc/profile
,然后获取 /etc/bashrc
。该文件的内容包括这一行:
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
$TERM_PROGRAM
环境变量仅由 Apple 的终端应用设置。打印该变量的值 returns Apple_Terminal
。换句话说,如果 /etc/bashrc
文件存在且可读,它会尝试获取 /etc/bashrc_Apple_Terminal
文件。在这个文件中,MacOS 执行其特殊的 Bash 会话处理,以配合 OS.
毕竟,Bash 将获取用户在其主目录中的任何配置(如 ~/.bash_profile
或 ~/.bashrc
)。话虽如此,如果不执行其他人已经提到,即将 $SHELL_SESSION_HISTORY
设置为 0
以消除基于会话的历史记录,并创建一个 ~/.bash_sessions_disable
以防止每次 Apple 的终端被创建 .bash_sessions
目录开始了。
核方法
消除任何此新 MacOS 功能的两种可能的替代方法是 1) 从 /etc/bashrc
文件中删除最后一行,或 2) 重命名或删除 /etc/bashrc_Apple_Terminal
到别的东西。
执行此操作后,Apple 终端应用程序的行为将不再与非 Apple 终端模拟器不同。