Golang在macOS上安装导致zsh历史记录丢失?

Golang在macOS上安装导致zsh历史记录丢失? 刚刚使用 go.dev 上的最新安装程序在最新的 Ventura (13.4) 系统上进行了安装。

Terminal.app 中的 zsh 立即停止记录历史命令。

目前我发现让 zsh 记住历史命令的方法是在 ~/.zshrc 中添加:

setopt INC_APPEND_HISTORY

是否有其他解决此问题的方法?这已经在我两台不同的机器上发生了。在安装之前我明确测试过 zsh 是正常的。

3 回复

不,我没有尝试过iTerm2。就像我说的,我是在安装前和安装后立即测试了历史记录。

更多关于Golang在macOS上安装导致zsh历史记录丢失?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不清楚是什么原因导致的。我确实看到一些关于终端不保存历史记录的普遍情况,这取决于你如何关闭它:

https://www.reddit.com/r/MacOS/comments/12cwi4a/zsh_command_history_suddenly_not_being_saved/

想知道这是否可能有关联。你试过 ITerm2 吗?我在 MacOS 上开发时使用它,它非常不错。

根据你的描述,这个问题确实与Go安装程序在macOS上的行为有关。Go安装程序会修改~/.zshrc文件,添加自己的环境变量设置,这可能会干扰zsh的历史记录功能。

根本原因: Go安装程序在~/.zshrc中添加的配置行通常位于文件末尾,可能会覆盖某些zsh选项。特别是当它使用export语句设置环境变量时,可能会影响zsh的历史记录机制。

解决方案:

  1. 检查并修复现有的~/.zshrc配置: 查看Go安装程序添加的内容,确保它不会覆盖HISTFILE或相关环境变量:
# 查看Go添加的配置
tail -20 ~/.zshrc

# 确保历史记录配置在Go配置之前
echo 'setopt INC_APPEND_HISTORY' >> ~/.zshrc
  1. 明确设置zsh历史记录环境变量:~/.zshrc文件的开头或Go配置之前添加:
# 历史记录文件位置
HISTFILE=~/.zsh_history
# 历史记录最大数量
HISTSIZE=10000
SAVEHIST=10000
# 启用历史记录
setopt appendhistory
setopt incappendhistory
setopt sharehistory
  1. 如果问题持续,检查Go的配置位置: 将Go的环境变量配置移到单独的文件中:
# 创建单独的Go配置文件
echo 'export PATH=$PATH:/usr/local/go/bin' > ~/.goenv
echo 'export GOPATH=$HOME/go' >> ~/.goenv

# 在~/.zshrc中引用
source ~/.goenv
  1. 验证zsh历史记录配置: 创建一个测试脚本验证配置:
// test_zsh_history.go
package main

import (
    "fmt"
    "os"
    "os/exec"
)

func main() {
    // 测试zsh历史记录是否工作
    cmd := exec.Command("zsh", "-c", "echo 'test command' && history | tail -5")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    cmd.Run()
}

运行测试:

go run test_zsh_history.go
  1. 备选方案:使用Homebrew安装Go: 如果继续遇到问题,考虑使用Homebrew安装:
# 卸载当前Go安装
sudo rm -rf /usr/local/go

# 使用Homebrew安装
brew install go

# 验证安装
go version

关键点: 确保zsh的历史记录配置(特别是HISTFILEHISTSIZESAVEHIST和相关的setopt选项)在~/.zshrc中位于Go环境变量配置之前,或者将Go配置移到单独的文件中通过source引入。

回到顶部