我最近从 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
。如该文件所述,要禁用此功能,您需要执行以下操作:
- 在您的主目录中,创建一个名为的纯文本文件
.zprofile
。 - 在此文件中,添加以下内容:
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。