無視したいみんな引数に関係なく、私のbash履歴のコマンドが呼び出されます。たとえば、 、ls
、ls -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)
いずれかと正確に一致します。ここで与えられるパターンは、行の先頭で一致し、空白とゼロ個以上の他の後続の文字が続くか、任意の文字とまったく一致しないものです。foo
bar
ls@( *|)
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