如何在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