完全禁用 zsh 会话文件夹

完全禁用 zsh 会话文件夹

我最近从 Ubuntu 切换到 macOS Big Sur 11.1,Apple 正在使用它zsh作为默认 shell。该.zsh_sessions文件夹占用了大约 100 MB,我想完全禁用它,尽管我可以正常删除。

我在我的博客中添加了以下内容.zshrc但毫无用处:

set hist_ignore_all_dumps
setopt hist_ignore_space
setopt HIST_NO_FUNCTIONS
SHELL_SESSION_HISTORY=0

我想.zsh_sessions完全禁止创建文件夹。

答案1

可以在 中找到为 Zsh 设置 macOS 的“保存/恢复 Shell 状态”功能的代码/etc/zshrc_Apple_Terminal。如该文件所述,要禁用此功能,您需要执行以下操作:

  1. 在您的主目录中,创建一个名为的纯文本文件.zprofile
  2. 在此文件中,添加以下内容:
    export SHELL_SESSIONS_DISABLE=1
    

为什么需要将变量放入~/.zprofile

当 Zsh 作为交互的shell(无论是否登录),它将按顺序获取/etc/zshrc~/.zshrc。如果(且仅当)macOS/etc/zshrc在 Terminal.app 中运行,它将调用/etc/zshrc_Apple_Terminal,从而启动“保存/恢复”功能。这意味着您无法在中设置变量来禁用此功能~/.zshrc,因为该文件是只读的该功能已经启动并“恢复”了您的上一次会话。

但是,每当你在 Apple 的 Terminal.app 中打开新标签页或窗口时,它都会启动一个新的交互式登录shell。当 Zsh 登录 shell 启动时,它会获取~/.zprofile并执行此操作采购/etc/zshrc

为什么需要export变量

作为登录 shell 后代的交互式 shell 本身并不会自动成为登录 shell。因此,如果您要在每个登录 shell 中禁用该功能,只需环境变量,那么任何以 启动的子 shell,比如说,exec zsh仍然会在启用“保存/恢复”功能的情况下启动。

要解决这个问题,你需要将export变量放入 shell 的环境。每个子进程都会继承其父进程的环境以及其中的所有变量。这样,您就可以确保在登录 shell 的后代交互式 shell 中禁用“保存/恢复”功能,但不一定在登录 shell 本身中禁用。

答案2

您可以切换到 bash,bash 也会将会话记录在类似的 ~/.bash_sessions 文件或文件夹中 - 如果您愿意,UNIX 中的所有内容实际上都是文件。但是,为了防止在 /bin/bash 中创建会话文件,“touch ~/.bash_sessions_disable”

如果您不喜欢有关苹果切换到 zsh 的消息,那么从苹果的终端切换到 iTerm2 时就不必看到它。iTerm2 是迄今为止更好的,当您使用它时,获取 brew,然后 brew install bash,根本不要使用苹果的 bash。

我建议获取 iTerm2,完全忘记苹果的终端,然后获取开源 bash,并在 iTerm2 中将其指向您的登录或非登录 shell。

对于这个问题,请查看这两个文件,看看这些会话内容是如何实现的:

/etc/bashrc_Apple_Terminal
/etc/zshrc_Apple_Terminal

它们来源于正常的“苹果终端”启动顺序。执行 man on bash 和/或 man zsh。

相关内容