Bash
有沒有一種簡單的方法可以避免在 bash 的 HISTIGNORE 中重複命令?
無論參數如何,我都想忽略我的 bash 歷史記錄中對命令的所有呼叫。例如,要排除所有
ls
、ls -l
和ls SOME_DIRECTORY
,我的理解是我需要這樣做:HISTIGNORE='ls:ls *'
我不能僅僅
HISTIGNORE='ls*'
因為那也會忽略其他以 開頭的命令ls
,這是不可取的。但是,ls
當ls *
我將條目添加到HISTIGNORE
.有沒有一種模式可以用來匹配命令本身和參數?
HISTIGNORE
模式匹配尊重extglob
shell 選項的設置,並且通過擴展的萬用字元,您可以使用它來匹配以空格開頭ls
併後跟空格然後是其他任何內容,或者什麼都不加(行尾)的命令。shopt -s extglob HISTIGNORE='ls@( *|)'
bash 擴展 glob的
@(foo|bar)
格式將與foo
或中的一個完全匹配bar
。在這裡,我們給出的模式是ls@( *|)
,它將ls
在行首匹配,然後是空格和 0 個或更多其他後續字元,或者根本沒有字元。這是在行動:
$ 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