すべてのコマンドの後に履歴ファイルの重複レコードが削除されるようにkshの.kshrcに設定するにはどうすればよいですか?
ありがとう
ksh93
履歴を書き換えるオプションをサポートしたことはありません。
一部のシェルは、終了時または要求時にのみ履歴ファイルを書き込みます。 ksh93
すべてのコマンドの後に書き込むため、多くの同期 I/O が生成されます。
一部の環境 (NFS など) では、これがインタラクティブなエクスペリエンスに影響を与え、シェルが各コマンドの後に待機する原因となる可能性があります。
私は ksh バフではないので、履歴の重複を無視するシェル オプションがあるかどうかはわかりません。とにかく、次のような小さな 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