기록에 저장하지 않고 zsh에서 명령을 실행하는 방법("up" 키를 사용해도)

기록에 저장하지 않고 zsh에서 명령을 실행하는 방법("up" 키를 사용해도)

사람들은 zsh에서 후크를 사용한다고 언급 preexec하지만 정확히 어떻게 사용합니까? 내 말은, 모든 명령을 확인하여 기록에 남기고 싶지 않은 명령인지 확인할 수 있지만 그 후에는 무엇을 해야 합니까?

답변1

기본적으로 zsh세션 기록의 마지막 명령은 설정된 경우에도 항상 유지됩니다 HISTSIZE=0. 기록 메커니즘을 우회하기 위해 자신만의 위젯을 작성할 수 있습니다.

sneaky-run () {   
    echo
    eval $BUFFER
    BUFFER=''
    zle reset-prompt
}

zle -N sneaky-run
bindkey '^X^M' sneaky-run

위젯은 sneaky-run현재 입력된 명령을 실행한 다음 명령 버퍼를 지우고 프롬프트를 재설정합니다. 위젯 내에서 실행되는 명령은 기록에 추가되지 않습니다.

echo출력이 새 줄에서 시작되도록 처음에 필요합니다 . 여러 줄로 구성된 프롬프트가 있는 경우 echo각 추가 줄 앞에 s 를 추가 해야 할 수도 있습니다 zle reset-prompt. 그렇지 않으면 프롬프트가 명령 출력의 여러 줄을 덮어쓸 수 있습니다.

이 예에서는 sneaky-run키 조합 Ctrl+ X, 에 바인딩합니다 Enter.


이를 위해 추가 키 조합을 사용하지 않으려면 accept-line일반적으로 다음과 같은 위젯을 래핑할 수도 있습니다.Enter

accept-line-with-sneaky () {   
    if [[ "$BUFFER" == "${BUFFER#" } ]] ; then
        zle accept-line
    else
        echo
        eval $BUFFER
        BUFFER=''
        zle reset-prompt
    fi
}

zle -N accept-line-with-sneaky
bindkey '^M' accept-line-with-sneaky

이는 설정 동작과 유사합니다 HIST_IGNORE_SPACE. 명령이 공백으로 시작하면 기록에 추가되지 않습니다. 그러나 with 외에도 HIST_IGNORE_SPACE표현식을 사용할 수 없습니다 Up.

노트:여기서는 가장 기본적인 키 바인딩 중 하나를 다룰 것입니다 zsh. 따라서 ~/.zshrc.

답변2

이 옵션을 사용해야 합니다 HIST_IGNORE_SPACE.

setopt HIST_IGNORE_SPACE

또는 구성 파일에 설정하고 저장하지 않으려는 명령 앞에 공백을 넣으십시오.

관련 정보