如何防止光标污染我的Bash历史记录?

人工智能 2026-07-10

我在很大程度上依赖我的bash历史记录和 fzf。我经常 Ctrl+R,并在 ssh 中搜索最近的连接,但得到的只是像这样的重复行堆积:

```bash
cat "/tmp/cursor_remote_install_43b75fd8-acc2-4207-ba95-2185a7ec0963.sh" | ssh -T -F "/home/user/.ssh/config_vscode_remote" -D 45007 [email protected] bash --login -c bash; echo "Exit code: $?. Finished running command."

甚至在每次打开新窗口并连接到远程机器时,我在内置的 Cursor 终端里也会看到这个(它有一个 `anysphere.remote-ssh-1.0.48` 提示符)。我本来希望 Cursor 所执行的任何命令都在非交互式 shell 中完成,这样就不会出现在我的 bash 历史中。

我现在正在运行 `sed -i '/cursor_remote_install/d' ~/.my_bash_history` 来清理它,并定期打开一个新终端,但这变得越来越让人厌烦。

有没有更好的变通办法?是否可以让这些行永远不被保存?也许只要检测 Cursor 将我的 `~/.bashrc` 导入,并把历史记录文件设为 /dev/null?

## 解决方案

你可以创建一个系统用户来使用 Cursor,同时在系统中再创建一个用于你的手动命令的用户。这样你就会有两个拥有各自历史记录的系统用户,它们之间不会混淆。

这会提升你的操作系统的安全性,因为 Cursor 的基于 LLM 的功能很可能是后门。如果你给它 sudo 权限,它将能够读取你拥有的内容并修改它们。相反,稍微更可靠的做法是确保如果你的 LLM 功能具有终端访问以便于使用,你可以将它的权限限制在你愿意接受的范围内。

## 备选方案

你可以利用 `~/.bash_logout` 功能,在 Bash 登出时运行一个脚本。

直接使用 history 命令本身按逆序删除条目,这样 history 就不会删除错误的命令。把这个脚本放在 `.bash_logout`。

for h in $(history | grep 'cursor_remote_install' | gawk '{print $1}' | tac);do
  history -d "$h"
done

```

搜索部分可以先通过运行以下命令来测试:

history | grep 'cursor_remote_install'

然后再加入gawk/tac

history | grep 'cursor_remote_install' | gawk '{print $1}' | tac

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章