역사에서 한 줄을 제거하는 방법?


답변:


338

예방 조치

기록에 저장하지 않고 명령을 실행하려면 추가 공간을 두십시오

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

이것이 작동하려면 ignorespace또는 ignoreboth에 필요합니다 HISTCONTROL. 예를 들어

HISTCONTROL=ignorespace

이 설정을 영구적으로 유지하려면에 설정하십시오 .bashrc.

사후 정리

이미 명령을 실행하고 기록에서 제거하려면 먼저

history

기록에 명령 목록을 표시합니다. 삭제하려는 번호 (예 : 1234) 옆의 번호를 찾아서 실행하십시오.

history -d 1234

또한 삭제하려는 행이 $ HISTFILE에 이미 기록 된 경우 (일반적으로 세션을 종료 할 때 발생 함) $ HISTFILE에 다시 써야합니다. 그렇지 않으면 새 행을 열 때 해당 행이 다시 나타납니다. 세션:

history -w

효과가있었습니다. ~ / .bashrc를 수정 한 후에 소싱해야한다고 생각합니다 ...
B Seven

3
@ jw013 PROMPT_COMMAND를로 설정 history -a했습니다.이 경우 정상적인 구성에서 종료하지 않고 이미 기록 파일에 기록됩니다. 구체적으로 : mywiki.wooledge.org/BashFAQ/088
jordanm

5
한 줄을 삭제 한 후을 사용하여 $ HISTFILE에 현재 기록을 작성해야합니다 history -w. 그렇지 않으면 종료해도 삭제 된 줄은 여전히 ​​존재합니다!
Felipe Alvarez

1
위의 의견에 +1; history -wafter history -d {num}를 사용하는 것이 정확히 필요한 것입니다-중요한 tidbit를 답변에 추가해야합니다. 그렇지 않으면 사용자는 현재 쉘에서 임시 삭제가 영구적이라고 생각할 수 있습니다.
마이클

1
@BobStein history -w.bash_history파일에 이미 기록 된 항목에 필요 합니다. 재현 방법 (예 : 스톡 구성의 CentOS 7에서) : 1. 로그인 2. 명령 입력 echo foo3. 로그 아웃 4. 다시 로그인 5. echo foo6. 로그 아웃에 대한 항목 삭제 7. 다시 로그인 : 항목이 여전히 존재합니다. bash 기록을 구성하는 방법에 따라 다른 방법으로 (예 : 로그 아웃하기 전에 기록 작성을 유발하는 경우)이 문제를 재현 할 수 있습니다.
maxschlepzig


6

내에 이것을 가지고 ~/.bashrc있어 명령 $ forget이 이전 명령을 기록에서 삭제합니다.

function forget() {                                                              
   history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);              
}

조금 복잡해 보입니다. history -d $( history | tail -n 1 | cut -f 1 -d " " )더 간단 하지 않습니까?
seumasmac

1
history | tail -n1는 IS history그래서 그 번호를 삭제하는 명령 자체가 잘못된 항목을 가져옵니다. 그러나 history -d $( history | awk 'END{print $1-1}' )라인 선택, 필드 선택 및 빼기를 결합합니다.
dave_thompson_085

누군가 이것을 이것을 zshell에 이식하는 데 도움을 줄 수 있습니까?
Alex S

6

에서 항목을 항상 편집하고 제거 할 수 있습니다. ~/.bash_history하나 이상의 항목을 제거하려는 경우 유용합니다.


2
쉘을 종료 할 때 이러한 항목이 다시 소개 될 가능성이 높습니다.
l0b0

5

전체 bash 세션을 잊고 싶다면 kill현재 bash 프로세스를 수행하면됩니다. 변수 는 현재 쉘을 $$보유 하므로 pid다음을 수행 할 수 있습니다.

kill -9 $$

1

히스토리를 지운 후에 변경 사항을 작성해야합니다. 히스토리에서 히스토리 지우기 명령을 원하지 않으면 다음과 같이 명령을 실행해야합니다.

history -c && history -w && logout

행운을 빕니다.


-1
Adding another point suppose if you want to delete a range of history lines

You can use below script. 

Below example will delete history output from line 1 to line 150.

for i in `history | awk 'NR > 1 && NR <=150{print   $1}'`; do history -d $i; done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.