.bash_historyから重複を削除して順序を維持する方法は?

.bash_historyから重複を削除して順序を維持する方法は?

control+r私はコマンド履歴を検索するために再帰を使用するのが大好きです。私が使用したいいくつかの良いオプションを見つけました。

# ignore duplicate commands, ignore commands starting with a space
export HISTCONTROL=erasedups:ignorespace

# keep the last 5000 entries
export HISTSIZE=5000

# append to the history instead of overwriting (good for multiple connections)
shopt -s histappend

私にとって唯一の問題は、連続erasedupsした重複エントリのみを削除することでした。したがって、次のコマンド文字列を使用してください。

ls
cd ~
ls

コマンドはls実際には2回記録されます。定期的にcronを実行することを検討しました。

cat .bash_history | sort | uniq > temp.txt
mv temp.txt .bash_history

これにより重複項目が削除されますが、残念ながら順序は維持されません。そのファイルを最初に使用しないと機能sortしないと思いますuniq

.bash_historyから重複を削除して順序を維持する方法は?

追加クレジット:

.bash_historyスクリプトを介してファイルを上書きするのに問題がありますか?たとえば、Apacheログファイルを削除する場合は、nohup / Resetシグナルを送信してkillファイルへの接続をフラッシュする必要があると思います。ファイルの場合の場合、フィルタスクリプトを実行する前に接続されたセッションがないことを確認して確認する.bash_historyために使用できる方法はありますか?ps

ベストアンサー1

だから、重複した項目に迷惑をかけた後、私は同じことを探してい~/.bash_profileました~/.bashrc

export HISTCONTROL=ignoreboth:erasedups

これはユーザーが望むことをほぼ正確に行い、1つのシェルインスタンスにある最新のコマンドのみを保持します。ignoreboth実際に仕事をしてignorespace:ignoredups仕事erasedupsを終わらせてください。

少なくとも私のMac端末では、bashは完璧に動作します。それを発見askubuntu.comにアクセスしてください。

これはignoredups従来では役に立ちません.bash_history。重複したエントリは、使用中にファイルに表示され続けますshopt -s histappend

おすすめ記事