Bash

有沒有一種簡單的方法可以避免在 bash 的 HISTIGNORE 中重複命令?

  • February 26, 2022

無論參數如何,我都想忽略我的 bash 歷史記錄中對命令的所有呼叫。例如,要排除所有lsls -lls SOME_DIRECTORY,我的理解是我需要這樣做:

HISTIGNORE='ls:ls *'

我不能僅僅HISTIGNORE='ls*'因為那也會忽略其他以 開頭的命令ls,這是不可取的。但是,lsls *我將條目添加到HISTIGNORE.

有沒有一種模式可以用來匹配命令本身參數?

HISTIGNORE模式匹配尊重extglobshell 選項的設置,並且通過擴展的萬用字元,您可以使用它來匹配以空格開頭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 

引用自:https://unix.stackexchange.com/questions/692180