ZSH의 기록에서 항목을 제거하는 방법


79

zsh를 사용하여 명령을 실행했다고 가정 해 보겠습니다.

echo "mysecret" > file

다음 명령을 사용하여 항목 번호를 포함한 내역을 쉽게 인쇄 할 수 있습니다 fc -l.

1  echo "mysecret" >| file

그러나 어떻게 기록에서 항목을 쉽게 삭제할 수 있습니까?

man zshbuiltins 에서 해당 단락을 찾을 수 없습니다 .


2
SuperUser와 달리 StackOverflow에서이 작업은 무엇입니까?
— Charles Duffy

답변:


96

* BSD / Darwin (macOS) :

LC_ALL=C sed -i '' '/porn/d' $HISTFILE

Linux (GNU sed) :

LC_ALL=C sed -i '/porn/d' $HISTFILE

$ HISTFILE에서 "porn"과 일치하는 모든 줄을 제거합니다.

를 사용하면 setopt HIST_IGNORE_SPACE$ HISTFILE에 기록되지 않도록 위의 명령 앞에 공백 문자를 추가 할 수 있습니다.

로 팀 아래에 자신의 의견에서 지적 , 접두사 LC_ALL = C의 방지 '불법 바이트 시퀀스'오류가 발생했습니다.


1
NB osx / BSD에서 백업 파일을 명시 적으로 지정하지 않으려면 -i 뒤에 빈 따옴표를 넣어야합니다 sed -i '' '/S3_SECRET/d' $HISTFILE. 이것은 리눅스에서 작동하지 않습니다. stackoverflow.com/questions/5694228/...
— 팀 Diggins에게

3
그리고 당신은 따라서 '불법 바이트 시퀀스'다음 세트 LC_ALL = C 얻을 경우 : LC_ALL=C sed -i '' '/S3_SECRET/d' $HISTFILE stackoverflow.com/questions/11287564/...
— 팀 Diggins

54

이 작업을 수행하는 우아한 방법이 있는지는 모르겠지만 비슷한 상황에서 로그 아웃 한 다음 (zsh가 버퍼를 비우고 내 기록을 파일에 기록하도록 허용) 로그인 한 다음 마지막 으로 수동으로 편집 ~/.zsh_history 하여 " 위험한 "라인.


나를 위해 일했습니다. 변경 사항을 반영하기 위해 터미널을 다시 시작해야했습니다.
— weltschmerz

보너스 포인트의 경우 환경 변수를 설정하여 히스토리 파일을로드하지 HISTFILE=/dev/null않거나 다른 쉘을 사용하십시오. 경우 zsh로그인 쉘, 로그인이며 exec sh, 다음 편집 ~/.zhistory.
— gnucchi

작동합니다! 에서 명령을 제거한 ~/.zsh_history다음 zsh를 다시 시작하십시오.
— Ferris

29

zsh에서 HIST_IGNORE_SPACE 옵션을 사용하는 경우 명령 앞에 공백 ""을 추가 할 수 있으며 히스토리 파일에 기억되지 않습니다. 일반적으로 사용하는 비밀 명령이 있으면 alias hiddencommand = 'hiddencommand' 줄을 따라 할 수 있습니다 .


5
넣어 setopt histignorespace당신에~/.zshrc
— 팀 아벨

감사합니다 histignorespace. 매우 유용한 !
— Matteo Gaggiano

1

이 함수는 질문없이 Zsh 기록에서 원하는 한 줄을 제거합니다.

# Accepts one history line number as argument.
# Alternatively, you can do `dc -1` to remove the last line.
dc () {
  # Prevent the specified history line from being saved.
  local HISTORY_IGNORE="${(b)$(fc -ln $1 $1)}"

  # Write out the history to file, excluding lines that match `$HISTORY_IGNORE`.
  fc -W

  # Dispose of the current history and read the new history from file.
  fc -p $HISTFILE $HISTSIZE $SAVEHIST

  # TA-DA!
  print "Deleted '$HISTORY_IGNORE' from history."
}

모든 dc명령이 히스토리에 기록 되지 않도록 추가로 방지 하려면 ~/.zshrc파일에 다음을 추가 하십시오.

zshaddhistory() {
 [[ $1 != 'dc '* ]]
}

최신 정보

이제 플러그인으로 더 포괄적 인 솔루션을 게시했습니다 : https://github.com/marlonrichert/zsh-hist


-2

에서 bash는 :

1- bash 터미널 유형

hsitory # 이것은 행 번호와 함께 히스토리 .bash_history 파일의 모든 명령을 나열합니다.

전의:

  ...
  987  cd
  988  ssh x@127.0.0.1
  990  exit
  991  cd

2- 삭제하려는 CMD 라인 번호를 선택하십시오.

history -d 988

참고 : 예를 들어 마지막 3 개의 CMD를 삭제하려면 하단에서 세 번째 줄 번호 (예 : 988)를 선택하고 CMD history -d 988를 순서대로 3 번 반복합니다 .

출처


3
history -dZSH에서 작동하지 않습니다. 별칭 일 뿐이며 오류로 fc -l 1끝납니다 fc: event not found: -d.
— Wirone

예, bash로 썼습니다! 이런 경우에 어떤 일이 떠들썩한 파티를 위해 그것을 필요는 zsh을하지
— KhogaEslam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.