Macos 如何在OS X El Capitan中禁用Bash会话

Macos 如何在OS X El Capitan中禁用Bash会话,macos,bash,osx-elcapitan,Macos,Bash,Osx Elcapitan,OS X El Capitan(10.11测试版)中的一个看似新的功能。我现在有一个包含历史文件的~/.bash\u sessions目录,并且我的HISTFILE和HISTIGNOREenvars正在被覆盖。如何禁用所有这些功能?如果手动启动新的Bash会话(即Bash-xl),您可以看到登录时运行的是什么 您将在输出中看到以下行: 。。。。 +++'[''!-e/Users/username/.bash\u sessions\u disable'] 您可以在主目录中创建一个.bash\u

OS X El Capitan(10.11测试版)中的一个看似新的功能。我现在有一个包含历史文件的
~/.bash\u sessions
目录,并且我的
HISTFILE
HISTIGNORE
envars正在被覆盖。如何禁用所有这些功能?

如果手动启动新的Bash会话(即
Bash-xl
),您可以看到登录时运行的是什么

您将在输出中看到以下行:

。。。。
+++'[''!-e/Users/username/.bash\u sessions\u disable']

您可以在主目录中创建一个
.bash\u sessions\u disable
文件来禁用此功能。

此行为在
/etc/bashrc\u Apple\u Terminal
中定义。它包含文档注释,描述它的功能以及如何自定义它

您可以通过在
~/.bashrc
脚本中设置
SHELL\u session\u history=0来禁用每终端会话命令历史记录功能,如下所述:

您可以通过设置禁用此行为并共享单个历史记录 SHELL\u会话\u历史记录为0。有一些常见的用户自定义 安排在运行的shell之间共享新命令的 在每个提示下操作历史记录,它们通常包括 "shopt-s histappend";;因此,如果histappend shell选项为 已启用,默认情况下禁用每会话历史记录。你可以 通过将SHELL_SESSION_HISTORY设置为1显式启用它


请注意,尽管您可以通过创建
~/.bash\u sessions\u disable
来禁用整个会话状态恢复机制,但仅禁用每会话命令历史记录功能是不必要的,不建议这样做。

总之,这与Apple的功能有关。启用此功能后,退出应用程序或重新启动应用程序时,应用程序下次打开时,将打开以前打开的窗口

关于航站楼,要做到这一点,必须有三件事:

  • $HOME/.bash\u sessions\u disable
    必须不存在
  • 退出应用程序时,必须选中“系统首选项”/“常规”/“关闭窗口”
  • “不”
  • 重新启动时,选择
    重新打开windows
  • 当您重新打开终端时,它将在相同的屏幕位置重新打开以前的窗口和选项卡。此外,如果您在重新打开Windows时选中了终端/首选项/窗口类型/窗口/恢复/恢复文本,它将恢复每个屏幕上的文本

    最后,这与OP的问题特别相关,如果满足以下条件,它将恢复每个窗口/选项卡中的历史记录:

  • SHELL\u会话\u历史记录
    未设置或设置为1
  • 未设置
    shopt histappend
  • HISTTIMEFORMAT
    未设置
  • 如果
    SHELL\u SESSION\u HISTORY
    .bashrc
    中显式设置为1,则覆盖最后两个要求,即可以设置
    shopt histappend
    HISTTIMEFORMAT


    此外,需要注意
    HISTSIZE
    HISTFILESIZE
    变量。它们不应该太大或太小,一些人建议不设置它们,以便采用苹果的默认值

    到目前为止,关于这个主题的所有文章都是准确和有用的,应该使用前面提到的技巧来代替这个主题。我将要提到一种完全的核方法,只是为了娱乐性的选择,也是为了扩大对这个主题的进一步理解

    我获得这些知识的唯一原因是,我正在寻找一种替代方案,以避免需要创建一个
    ~/.bash\u sessions\u disable
    文件;相反,我更希望通过在现有的
    ~/.bash\u配置文件中添加一些行来防止会话行为的发生。不幸的是,如果没有核武器,这是不可能的,因此官方的答案仍然是最好的办法

    摘要

    当Bash第一次在MacOS上启动时,它将首先发出
    /etc/profile
    ,这反过来又发出
    /etc/bashrc
    。该文件的内容包括以下行:

    [ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
    
    $TERM_程序
    环境变量仅由苹果的终端应用程序设置。打印该变量的值将返回
    Apple\u Terminal
    。换言之,
    /etc/bashrc
    文件正在尝试源文件
    /etc/bashrc\u Apple\u-Terminal
    ,如果它既存在又可读。在这个文件中,MacOS执行其特殊的Bash会话处理,以与操作系统的恢复功能相结合

    在所有这些之后,Bash将为用户在其主目录中的任何配置(如
    ~/.Bash\u profile
    ~/.bashrc
    )提供源代码。如上所述,如果不执行其他人提到的操作,即将
    $SHELL\u SESSION\u HISTORY
    设置为
    0
    以消除基于会话的历史记录,则无法在纯配置级别上覆盖
    /etc/bashrc\u Apple\u Terminal
    文件中完成的所有工作,并创建一个
    ~/.bash\u sessions\u disable
    ,以防止每次苹果终端启动时创建
    .bash\u sessions
    目录

    核方法

    消除任何这种新的MacOS功能的两种可能的替代方法是:1)从
    /etc/bashrc
    文件中删除最后一行,或2)重命名或删除
    /etc/bashrc\u Apple\u终端


    这样做之后,苹果的终端应用程序的行为将不再与非苹果终端仿真器有所不同。

    我喜欢访问比以前多一点的历史,但它对自己有任何限制吗?看起来每个终端调用都有两三个文件