有没有一种简单的方法可以避免在 bash 的 HISTIGNORE 中重复命令?

有没有一种简单的方法可以避免在 bash 的 HISTIGNORE 中重复命令?

我想忽略全部无论参数如何,都会调用我的 bash 历史记录中的命令。例如,要排除所有lsls -lls SOME_DIRECTORY,我的理解是我需要这样做:

HISTIGNORE='ls:ls *'

我不能仅仅使用它,HISTIGNORE='ls*'因为这也会忽略恰好以 开头的其他命令ls,这是不可取的。但是,lsls *我将条目添加到HISTIGNORE.

是否有一种模式可以用来单独匹配命令有论据?

答案1

HISTIGNORE模式匹配遵循 shell 选项的设置extglob,并且通过扩展的通配符,您可以使用它来匹配ls以空格开头并后跟任何其他内容或不接任何内容(行尾)的命令。

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

bash 扩展 glob 的格式将与或@(foo|bar)之一完全匹配。在这里,我们给出的模式是这样的,它将在行的开头匹配,然后是一个空格和 0 个或多个其他后续字符,或者根本不匹配任何字符。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 

相关内容