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
)、利用可能なコマンド名に基づいて特定のスペルエラーに対する修正を提案します(たとえば、私のシステムでは修正を提供しますが、何もしませsl
んls
)ls-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
リンク仕組みの説明を提供