답변:
기록에 저장하지 않고 명령을 실행하려면 추가 공간을 두십시오
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
이것이 작동하려면 ignorespace
또는 ignoreboth
에 필요합니다 HISTCONTROL
. 예를 들어
HISTCONTROL=ignorespace
이 설정을 영구적으로 유지하려면에 설정하십시오 .bashrc
.
이미 명령을 실행하고 기록에서 제거하려면 먼저
history
기록에 명령 목록을 표시합니다. 삭제하려는 번호 (예 : 1234) 옆의 번호를 찾아서 실행하십시오.
history -d 1234
또한 삭제하려는 행이 $ HISTFILE에 이미 기록 된 경우 (일반적으로 세션을 종료 할 때 발생 함) $ HISTFILE에 다시 써야합니다. 그렇지 않으면 새 행을 열 때 해당 행이 다시 나타납니다. 세션:
history -w
history -a
했습니다.이 경우 정상적인 구성에서 종료하지 않고 이미 기록 파일에 기록됩니다. 구체적으로 : mywiki.wooledge.org/BashFAQ/088
history -w
. 그렇지 않으면 종료해도 삭제 된 줄은 여전히 존재합니다!
history -w
after history -d {num}
를 사용하는 것이 정확히 필요한 것입니다-중요한 tidbit를 답변에 추가해야합니다. 그렇지 않으면 사용자는 현재 쉘에서 임시 삭제가 영구적이라고 생각할 수 있습니다.
history -w
은 .bash_history
파일에 이미 기록 된 항목에 필요 합니다. 재현 방법 (예 : 스톡 구성의 CentOS 7에서) : 1. 로그인 2. 명령 입력 echo foo
3. 로그 아웃 4. 다시 로그인 5. echo foo
6. 로그 아웃에 대한 항목 삭제 7. 다시 로그인 : 항목이 여전히 존재합니다. bash 기록을 구성하는 방법에 따라 다른 방법으로 (예 : 로그 아웃하기 전에 기록 작성을 유발하는 경우)이 문제를 재현 할 수 있습니다.
내에 이것을 가지고 ~/.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 " " )
더 간단 하지 않습니까?
history | tail -n1
는 IS history
그래서 그 번호를 삭제하는 명령 자체가 잘못된 항목을 가져옵니다. 그러나 history -d $( history | awk 'END{print $1-1}' )
라인 선택, 필드 선택 및 빼기를 결합합니다.
전체 bash 세션을 잊고 싶다면 kill
현재 bash 프로세스를 수행하면됩니다. 변수 는 현재 쉘을 $$
보유 하므로 pid
다음을 수행 할 수 있습니다.
kill -9 $$
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