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ログファイルを削除する場合は、 kill
を使用してnohup/resetシグナルを送信する必要があると思います。 ファイルへの接続をフラッシュします。 .bash_history
の場合 ファイル、おそらく私は ps
を使用することができます フィルタリングスクリプトを実行する前に、接続されたセッションがないことを確認しますか?
承認された回答:
履歴の並べ替え
このコマンドはsort| uniq
のように機能します 、ただし、線を所定の位置に保持します
nl|sort -k 2|uniq -f 1|sort -n|cut -f 2
基本的に、各行にその番号を追加します。 sort | uniq
の後 -ingすると、すべての行が元の順序に従って(行番号フィールドを使用して)並べ替えられ、行番号フィールドが行から削除されます。
このソリューションには、等しい行のクラスのどの代表が出力に含まれるかが定義されていないため、最終出力での位置が定義されていないという欠点があります。ただし、最新の担当者を選択する必要がある場合は、並べ替えコード>できます 2番目のキーによる入力:
nl|sort -k2 -k 1,1nr|uniq -f1|sort -n|cut -f2
.bash_historyの管理
履歴の再読み込みと書き戻しには、 history -a
を使用できます。 およびhistory-w
それぞれ。