BashのHISTIGNOREでコマンドの繰り返しを避ける簡単な方法はありますか?

BashのHISTIGNOREでコマンドの繰り返しを避ける簡単な方法はありますか?

無視したいみんな引数に関係なく、私のbash履歴のコマンドが呼び出されます。たとえば、 、lsls -lと の両方を除外するには、ls SOME_DIRECTORY次のことが必要であると理解します。

HISTIGNORE='ls:ls *'

HISTIGNORE='ls*'で始まる他のコマンドも無視されるため、使用できません。lsこれは望ましくありません。しかし、lsアイテムls *HISTIGNORE

コマンドを個別に一致させるために使用できるパターンはありますか?そして買収は?

ベストアンサー1

HISTIGNOREパターンマッチングはシェルオプションの設定に従い、拡張ワイルドカードを使用すると、スペースで始まり、後ろに他の項目または何もない(行末)コマンドを一致させるextglobために使用できます。ls

shopt -s extglob
HISTIGNORE='ls@( *|)'

bash 拡張 glob の形式は、または@(foo|bar)いずれかと正確に一致します。ここで与えられるパターンは、行の先頭で一致し、空白とゼロ個以上の他の後続の文字が続くか、任意の文字とまったく一致しないものです。foobarls@( *|)ls

これが実際に動作するものです:

$ shopt -s extglob 
$ export HISTIGNORE='ls@( *|)'
$ history -c
$ ls > /dev/null 
$ ls * > /dev/null
$ ls -la > /dev/null
$ ls file > /dev/null
$ lsa
-bash: lsa: command not found
$ history 
    1  lsa
    2  history 

おすすめ記事