0

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

谢谢

4

2 回答 2

2

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

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

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

于 2013-05-20T16:58:08.670 回答
1

我不是 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
于 2013-05-19T16:36:31.427 回答