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.