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