删除KSH历史文件中的重复记录



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

谢谢

ksh93不支持重写历史记录的选项。

一些shell只在退出时或在请求时写入历史文件。ksh93在每个命令之后写入它,这将生成大量同步I/o。

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

我不是一个ksh爱好者,所以不能真正判断是否有一个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

最新更新