bash 기록에서 마지막 N 줄 삭제


40

실수로 파일을 쉘에 붙여 넣을 때 bash 기록에 추악한 말도 안되는 항목이 많이 있습니다. 해당 항목을 제거하는 확실한 방법이 있습니까? 분명히 셸을 닫고 .bash_history파일을 수동으로 편집 할 수는 있지만 현재 셸 기록을 수정하는 데 사용할 수있는 API가 있습니까?

답변:


36

history -d offset내장을 사용 하여 현재 쉘 히스토리에서 특정 라인을 삭제하거나 history -c전체 히스토리를 지울 수 있습니다.

하나의 오프셋을 인수로 사용하기 때문에 행 범위를 제거하려는 경우 실제로 실용적이지 않지만 루프를 사용하여 함수로 줄 바꿈 할 수 있습니다.

rmhist() {
    start=$1
    end=$2
    count=$(( end - start ))
    while [ $count -ge 0 ] ; do
        history -d $start
        ((count--))
    done
}

로 전화하십시오 rmhist first_line_to_delete last_line_to_delete. (의 출력에 따른 줄 번호 history)

history -w히스토리 파일에 강제로 쓰려면 사용하십시오 .


1
영업 이익은 N 삭제 요청 때문에 마지막 라인을,이 스크립트는 뭔가를 수행하여 수정해야 : tot_lines=$(history | wc -l)다음 반복합니다 history -d $(( tot_lines - $1 )).
PlasmaBinturong

2
대신 사용할 수있는 $(history | wc -l)변수 $HISTCMD가 있습니다.
PlasmaBinturong

28

명령 프롬프트에서이 하나의 라이너 만 도움이됩니다.

for i in {1..N}; do history -d START_NUM; done

START_NUM은 (는) 방문 기록의 시작 위치입니다. N은 삭제할 항목 수입니다.

전의: for i in {1..50}; do history -d 1030; done


3
왜 이것이 내장 함수가 아닌지 궁금합니다. '역사'는 매우 오래된 도구입니다.
Petr Gladkikh 2016 년

목적을 잘 제공하지만이 명령은 역사에서 볼 수 있습니다 :)
Rajeev Akotkar

askubuntu.com/a/978276/22866 에서 "기록에서 삭제 명령"을 삭제하는 좋은 방법이 있습니다 :-)
HanSooloo

0

user2982704의 대답은 거의 효과가 없었지만 거의 효과가 없었습니다. 나는 이와 같이 작은 변형을 만들어야했습니다.

내 이력이 1000이라고 가정하고 마지막 50 개 항목을 삭제하고 싶습니다

start=1000

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