![如何为同一用户的不同会话拥有单独的命令历史记录?](https://linux22.com/image/116/%E5%A6%82%E4%BD%95%E4%B8%BA%E5%90%8C%E4%B8%80%E7%94%A8%E6%88%B7%E7%9A%84%E4%B8%8D%E5%90%8C%E4%BC%9A%E8%AF%9D%E6%8B%A5%E6%9C%89%E5%8D%95%E7%8B%AC%E7%9A%84%E5%91%BD%E4%BB%A4%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%EF%BC%9F.png)
我在一些 Unix 服务器上遇到这个问题。当我为同一用户打开不同的会话时,命令历史记录由所有会话共享。如果我错误地按Ctrl-P
或up arrow
并只按 Enter,这会产生问题。有一次,我最终幸运地运行了rm -rf *
,因为我所在的目录没有删除文件的权限。
如何为同一用户的不同会话拥有单独的命令历史记录?大多数时候我使用 ksh 和 tcsh shell。
答案1
您可以添加HISTFILE=~/.hist$$
到您的.profile
.这应该为每个会话生成一个唯一的文件。
你最终会得到大量的,.hist*
所以我建议你偶尔删除它们。
答案2
来自常见问题解答:
Q1.如何获取 shell 的单独历史文件?
A1。 ksh 对使用相同历史文件名的所有 shell 使用共享历史文件。这意味着在一个窗口中输入的命令将被其他窗口中的 shell 看到。要获得单独的窗口,需要在创建第一个历史命令之前将 HISTFILE 变量设置为不同的名称。
答案3
我假设您正在谈论同时会话;将一个接一个的会话分开并不是很有用:您将永远无法再使用它的历史记录,因为所有会话都是唯一的。如果是这种情况,您最好禁用命令历史记录。
如果我们谈论分离同时会话,我建议您使用 Bash。我很确定我没有从与之混合的两个同时会话中获取命令历史记录。 Bash 仅在注销时写入历史记录.bash_history
,因此命令历史记录在注销后才会混合。如果使用 Bash 是可以接受的,这能解决您的问题吗?
答案4
你可以使用屏幕。我还做了一个由我的 konsole 配置文件定义的变量,并为每个会话提供了不同的历史文件,只有我能想到的方法。