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

时间:2013-05-19 11:01:42

标签: shell ksh

我怎样才能在ksh的.kshrc中设置每个命令后删除历史文件中的重复记录?

由于

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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