Bash レコードの自動整理

Bash レコードの自動整理

Bashの記録を自動的に整理する方法は?例えば

  • 履歴から検出可能なスペルエラーを削除する(ls-lhには表示されていないwhichため削除します。typeを意味しますls -lh
  • 残りのスペースを整理しcd  /cd /   同じように標準化する必要があります。

bashでこれは可能ですか?実行前または履歴に入る前にすべてのコマンドをフィルタリングできますか?

クリーンアップルーチンを実行する前にファイルに書き込まれるのを待つ必要がないことを願っています。これは、クリーンアップが実行される前にログアウトすることを意味します。:(

答え1

私は発生するすべての一般的なエラーに対してエイリアスを維持することを好みます。

alias ls-lh = ls -lh

空白が欠落しているスペルエラーを修正するには、エイリアスを使用してください。

alias cd..='cd ..

履歴で無視するすべてのコマンドを指定するには、HISTIGNORE を使用します。export HISTIGNORE="$LIST"無視したい履歴を一覧表示するために使用されます。

組み込みの「shopt」コマンドによって制御されるいくつかの異なるオプションがあります。

バラよりここ

答え2

いくつかの変数に加えて履歴をカスタマイズする方法がわかりませんHIST…。 zshに切り替えたいかもしれません。もう少しスマートです(しかし少しだけ)。 zshでは自動修正コマンドをオンにすることができます(setopt correct)、利用可能なコマンド名に基づいて特定のスペルエラーに対する修正を提案します(たとえば、私のシステムでは修正を提供しますが、何もしませsllsls-lh。 Zshの重複は、非連続的な重複を検出できるため、よりスマートです(setopt hist_ignore_all_dups)。 Zshは歴史的に空白の正規化を実行していませんが、完成したシステムはbashよりもスマートで、フルネームを入力するかクリックしても空白の数を一貫して維持するのでTab役立ちます。

答え3

~からこのブログ、このスクリプトは削除できます。自動的にbashですべてのコマンドが見つかりません。

まだbashがない場合は、PROMPT_COMMAND次に追加してください.bashrc

PROMPT_COMMAND="mypromptcommand"
function mypromptcommand {
}

プロンプトが表示されるたびに関数が実行されます。その中で私たちは以下を掲げました:

local exit_status=$?
# If the exit status was 127, the command was not found. Let's remove it from history
local number=$(history | tail -n 1 | awk '{print $1}')
if [ -n "$number" ]; then
    if [ $exit_status -eq 127 ] && ([ -z $HISTLASTENTRY ] || [ $HISTLASTENTRY -lt $number ]); then
        history -d $number
    else
        HISTLASTENTRY=$number
    fi
fi

リンク仕組みの説明を提供

関連情報