zsh로 히스토리에 등록하고 싶지 않은 (무시하고 싶은) 커멘드 라인을 지정한다

2662 단어 zshrcZsh

소개



zsh에만 국한되지는 않지만 명령 행 작업에서 자주 사용하는 것이 히스토리 기능입니다.

입력한 적이 있는 커맨드라인의 참조, 전개, 추출 등이 가능합니다.
가끔 히스토리를 검색하거나 파고 갈 때이 명령 방해가되지 않습니까?pwd , cd , vim 뭔가 그렇습니다

또한 HIST_VERIFY 옵션을 설정하지 않은 경우 실수로 위험한 명령 (mv, rm)을 확장하여 실행합니다.
무슨 일이 있니?

사실 zsh에서는 히스토리에 쌓고 싶지 않은 명령을 지정할 수 있습니다!
라는 광적인 기사

이렇게 쓰는 것



중요한 설정이지만 변수 HISTORY_IGNORE에 무시하고 싶은 명령을 지정하면됩니다.

.zshrc
HISTORY_IGNORE="pwd"

위의 예에서 pwd는 히스토리 파일에 기록되지 않습니다.HISTORY_IGNORE에는 패턴을 지정할 수 있습니다.

따라서 여러 명령을 지정하는 경우 다음과 같이 지정합니다.

.zshrc
HISTORY_IGNORE="(cd|pwd|l[sal])"

위의 예에서 cd, pwd, ls, la, ll는 무시됩니다. 편리!
쓰는 법은 Glob Operators
HISTORY_IGNORE 그럼, 히스토리 파일 기입시에는 제외해 줍니다만, 내부 히스토리(메모리)에는 보통으로 이력이 쌓입니다※fc -l 하면 남아 있는 것을 알 수 있다

내부 히스토리 등록시도 무시하는 경우는 다음의 방법으로 지정합니다

히스토리 (메모리)에도 쌓고 싶지 않습니다.


zshaddhistory 사용

.zshrc
zshaddhistory() {
  emulate -L zsh
  [[ ${1%%$'\n'} != ${~HISTORY_IGNORE} ]]
}

이 Hook 함수는 명령행 실행 전(=히스토리 등록 전)에 불려 갑니다
zshaddhistory가 상태 1를 반환하면 내부 기록에 더 이상 등록되지 않습니다.

조금 해설


  • 왼쪽 ${1%%$'\n'}명령 줄에서 줄 바꿈 문자를 제거합니다.
    변수 확장의 ${name%%pattern} 구문 사용
  • 오른쪽 ${~HISTORY_IGNORE}HISTORY_IGNORE를 패턴으로 확장
    복수 문자와의 비교로 자주&&

    포인트



    개인적으로이 설정의 좋은 점은 ignore 명령이라도 다음 명령을 실행할 때까지 기록에 남아 있다는 것입니다.
    즉 「인수의 일부만 갖고 싶다」 「인수를 바꾸어 실행하고 싶다」 때 어쩐지 직전의 커멘드로서 참조, 전개가 가능합니다

    마지막으로



    사실은 실행에 실패한 명령을 제외하고 싶었지만 할 수 없습니다.|| 사양 (명령 실행 후가 아니라 명령 실행 전에 호출됨)
    아시는 분 있으시면 알려주세요.

    이상, 도움이되면 기쁩니다.
  • 좋은 웹페이지 즐겨찾기