如何为同一用户的不同会话拥有单独的命令历史记录?

如何为同一用户的不同会话拥有单独的命令历史记录?

我在一些 Unix 服务器上遇到这个问题。当我为同一用户打开不同的会话时,命令历史记录由所有会话共享。如果我错误地按Ctrl-Pup 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 配置文件定义的变量,并为每个会话提供了不同的历史文件,只有我能想到的方法。

相关内容