2013-05-19 108 views
0

如何在ksh的.kshrc中设置历史文件中的重复记录将在每个命令后被删除?删除KSH的历史文件中的重复记录

感谢

+0

这是未详细说明的。你想保留第一个或最后一个重复条目? – Jens

+0

最后一个。例如,当在历史中是:A B C D并且我运行命令C时,历史上应该是A B D C –

回答

2

ksh93从未支持一个选项,以改写历史。

某些shell只在退出时或根据请求写入其历史文件。 ksh93在每个命令后写入,这会产生大量的同步I/O。

在某些环境中(例如NFS),这可能会影响交互式体验,导致shell在每个命令之后等待。

+0

已确认。 'zsh'虽然有几个关于历史数据的选项,并且有一个'ksh'兼容模式,但是由于我自己不使用'zsh',所以我无法评论它的真正兼容性。 –

+0

好的。那么我会写我的脚本。谢谢。 :) –

1

我不是一个KSH BUFF,所以真的不能告诉,如果有一个shell选项忽略历史的重复。无论如何,你可以随时修剪重复,像这样一个小perl脚本:

#!/usr/bin/env perl 

my $history = ".history"; 
open (HIST, '<', $history) or die "cannot read $history: $!"; 
my @oldhist = <HIST>; 
close HIST; 

my @newhist =(); 
my %seen =(); 
while (my $cmd = pop @oldhist) { 
    next if defined $seen{$cmd}; 
    ++$seen{$cmd}; 
    unshift @newhist, $cmd; 
} 

open (HIST, '>', $history) or die "cannot write $history: $!"; 
print HIST @newhist; 
close HIST; 

这原来

A 
B 
C 
D 
C 

A 
B 
D 
C 
相关问题