Bash의 HISTIGNORE에서 명령 반복을 피하는 쉬운 방법이 있습니까?

Bash의 HISTIGNORE에서 명령 반복을 피하는 쉬운 방법이 있습니까?

무시하고 싶다모두인수에 관계없이 내 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)또는 중 하나와 정확히 일치합니다. 여기서 주어진 패턴은 줄의 시작 부분에서 일치하고 공백과 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 

관련 정보