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


8

我在某些Unix服务器上遇到此问题。当我为同一用户打开不同的会话时,所有会话都共享命令历史记录。如果我误按Ctrl-Pup arrow仅按Enter,就会产生问题。有一次我rm -rf *幸运地结束了运行,当时我所在的目录中没有删除文件的权限。

如何为同一用户的不同会话设置单独的命令历史记录?大多数时候,我使用的是ksh和tcsh shell。

Answers:


8

ksh常见问题解答

Q1。如何获得单独的Shell历史文件?

A1。ksh对使用相同历史文件名的所有shell使用共享历史文件。这意味着在一个窗口中输入的命令将被其他窗口中的外壳看到。要获得单独的窗口,需要在创建第一个历史命令之前将HISTFILE变量设置为不同的名称。


11

您可以添加HISTFILE=~/.hist$$到中.profile。这将为每个会话生成一个唯一的文件。

您最终将获得大量,.hist*因此我建议您偶尔删除它们。


2

我假设您正在谈论同时进行的会话;分隔一个接一个的会话不是很有用:您将永远无法再使用它的历史记录,因为所有会话都是唯一的。如果真是这样,您最好禁用命令历史记录。

如果我们正在谈论分离同时进行的会话,我建议您使用Bash。我很确定我没有从同时进行的两个会话中获取命令历史记录。Bash仅.bash_history在注销时将历史记录写入,因此直到注销后命令历史记录才会混合。只要使用Bash是可以接受的,那可以解决您的问题吗?


感谢您的回复。我工作的HP-UX和它没有安装bash和我没有安装它的权限:(。
与Hemant

1

病会给格特的答案增加些东西。

格特

您可以将HISTFILE =〜/ .hist $$添加到您的.profile中。这将为每个会话生成一个唯一的文件。

您可以通过添加以下内容自动删除这些文件。

trap 'rm ${HISTFILE}' exit


2
请谨慎对待出口陷阱-外壳不会像您希望的那样堆叠它们-因此,出口陷阱的任何进一步设置都将覆盖以前的所有陷阱。我为陷阱写了一个堆放器,但是它几乎炸毁了我所有的精神导火索。
大卫·科利尔

-1

您可以使用screen。我还创建了一个由konsole配置文件定义变量,并为每个会话提供了不同的历史文件,这是我能想到的唯一方法。


我无法安装屏幕。它甚至没有在我的服务器上编译。
Hemant 2010年

无论如何,我不确定屏幕将如何为您提供这种功能
Michael Mrozek

@Michael您可以在屏幕上进行不同的会话,并且屏幕具有自己的历史记录。我不知道有人告诉我解决屏幕问题...我不喜欢屏幕。me脚的是,当我的第二个答案与其他被调高的答案基本相同时,这被调低了。@Hemant ...我应该知道吗?我不使用屏幕在系统上执行此操作。我只知道它可以实现类似的效果。
xenoterracide

我想我知道您在描述什么,但这不是屏幕功能,只是Shell工作方式的副作用。如果您打开两个外壳,除非外壳明确支持(例如ZSH可以,但是您需要显式启用它),否则在一个外壳中输入的命令将不会显示在另一个外壳的历史记录中。它不会保留单独的历史记录,它们都写入主历史记录文件,您只是看不到每个外壳程序的更改,因为通常,一旦外壳程序加载后,它们就不会检查历史记录文件的更改
Michael Mrozek

@MichaelMrozek korn外壳程序对所有窗口都有一个共享历史记录,无法禁用此历史记录。使用screen完全没有帮助。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.