기록 파일을 일시적으로 동결합니다.

기록 파일을 일시적으로 동결합니다.

다음 두 가지 질문은 특정 명령이 셸 기록에 추가되는 것을 방지하는 방법을 설명합니다.

답변은 사용자가 사용할 수 있는 솔루션에 중점을 둡니다.각 명령에 접두사 추가(예: 공백 포함) 내가 찾고 있는 것은 한 번만 실행하면 효과적으로 작동할 수 있는 명령입니다."꼭 매달리게 하다"내 기록 파일은 나중에 다른 명령을 사용하여 고정을 해제할 때까지 셸에 있습니다.

비록 역사는 "겨울 왕국":

  1. 나는 내 명령이 가능하기를 원합니다읽다기존 기록 파일에서(예: 명령 검색을 수행할 수 있도록) C-r예를 들어 표준 자동 완성을 수행합니다.

  2. 내가 실행하는 모든 명령이 기록에 추가되는 것을 방지하고 싶습니다.

zsh를 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

fc -p를 사용하여 새 기록 목록을 시작하고 fc -P이전 기록 목록을 불러올 수 있습니다. plain 이후에는 fc -p빈 기록 레코드를 얻게 됩니다. fc -p기록을 읽을 파일 이름을 전달할 수 있으므로 기록이 저장되고 즉시 사용할 수 있습니다. 호출 전의 값이 복원 fc -p됩니다 .fc -PHISTFILEfc -p

freeze_history () {
    fc -A
    fc -p $HISTFILE
    unset HISTFILE
}
unfreeze_history () {
    fc -P
}

불행히도 내역은 메모리에서 직접 편집할 수 없으며 파일에서 읽어 인위적으로만 채울 수 있습니다.

답변2

나는 다음 별칭을 사용합니다 .zshrc.

alias disablehistory="function zshaddhistory() {  return 1 }"
alias enablehistory="unset -f zshaddhistory"

따라서 를 실행할 수 disablehistory있으며 새 명령은 현재 세션의 기록에 입력되지 않습니다. 그러면 enablehistory.

어떻게 작동하나요? disablehistory정의히스토리 후크 기능.

후크 함수가 상태 1을 반환하는 경우(또는 2를 제외한 0이 아닌 값. 이후 버전의 셸에서는 보장되지 않지만)기록 행은 저장되지 않습니다., 다음 줄이 실행될 때까지 기록에 남아 있지만 즉시 재사용하거나 편집할 수 있습니다.

zsh따라서 기록 항목이 항상 거부됨을 나타냅니다 .

enablehistoryunsets( -f함수를 나타냄) zshaddhistory 함수를 사용하여 기본 동작을 반환합니다.

답변3

unset HISTFILE다음이 도움이 될 수 있습니다. 세션 기록을 끄려면 입력할 수 있습니다 . 로그아웃했다가 다시 로그인하면 다시 시작됩니다.

또한 클릭 한 번으로 기록의 명령으로 돌아가서 삭제할 수 있습니다 CTRL-u.

행운을 빌어요!

관련 정보