.bash_history에서 중복 항목을 피하는 방법


108

같은 명령이 내 역사에 반복해서 나열됩니다. 어떻게 피할 수 있습니까? 나는 그것이 가능하다는 것을 알고 HISTCONTROL있지만 올바른 길을 찾지 못했습니다.


나는 관련 질문을 만들어 : askubuntu.com/questions/205520/...를 . 히스토리의 딥은 명령의 컨텍스트를 보는 데 유용합니다. 기록을 인쇄 할 때 가끔 딥을 생략하고 싶은 것.
justingordon

답변:


123

로부터 bash매뉴얼 페이지

히스 트롤

히스토리 목록에서 명령이 저장되는 방법을 제어하는 ​​콜론으로 구분 된 값 목록. 값 목록에가 포함되어 있으면 ignorespace공백 문자로 시작하는 행이 기록 목록에 저장되지 않습니다. 값을 지정 ignoredups하면 이전 기록 항목과 일치하는 행이 저장되지 않습니다. 의 값은 및의 ignoreboth약어입니다 . 가치ignorespaceignoredupserasedups행을 저장하기 전에 현재 행과 일치하는 모든 이전 행이 기록 목록에서 제거됩니다. 위 목록에없는 값은 무시됩니다. HISTCONTROL이 설정되어 있지 않거나 유효한 값을 포함하지 않으면 셸 파서가 읽은 모든 행이 HISTIGNORE 값에 따라 히스토리 목록에 저장됩니다. 여러 줄 복합 명령의 두 번째 및 그 이후 줄은 테스트되지 않으며 HISTCONTROL의 값에 관계없이 기록에 추가됩니다.

따라서 다음 줄을 넣으십시오 ~/.bashrc.

export HISTCONTROL=ignoreboth:erasedups


~ / .bashrc의 맨 아래에 HISTCONTROL = ignoreboth를 추가하겠습니까?
karthick87

1
@karthick 어디에 놓아도 상관 없습니다. 하단은 괜찮습니다.
이사야

Ubuntu 12.04를 설치할 ~/.bash_login때 .bashrc가 수정 된 경우 대부분 작동하지만 항상 그렇지는 않습니다 .
ck-

3
bash 프로필 / rc 파일을 업데이트 한 후에이 파일들을 실행하는 것을 잊지 마십시오 –source ~/.bashrc && source ~/.bash_profile
Eric Kigathi

23

이것을 당신의 스틱 ~/.bashrc:

export HISTCONTROL=ignoredups

대신 사용할 수 있습니다 ignoreboth. 이것은 ignorespaces(공백으로 시작하는 명령)과 ignoredups(중복) 둘 다에 대한 약어입니다 .

내가 좋아 ignoredups내가 웹 사이트를 명령을 복사 할 때 나는 매우 성가신 앞에 공백 명령을 무시의 기본 동작을 발견하면 그 자체에 내가 실수로 너무 공간에 복사하기 때문에이 저장되지 않습니다 .... 그러나에 각각 자신의.


3
여전히 중복이 존재합니다. 무엇이 문제 일 수 있습니까 ?? imgur.com/fXeLQ.png
karthick87

5
@ karthick87은 다른 답변에서 인용했습니다 : 값을 지정 ignoredups하면 이전 기록 항목과 일치하는 행이 저장되지 않습니다 . 연속 된 동일한 줄만 제거합니다.
AL

10

이것을 넣으면 ~/.bashrcwlell과 같은 다른 세션에서 @alvin의 솔루션이 적용됩니다.

HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

출처 : Linux : Bash history : "무시"및 "삭제"설정은 세션 간 공통 기록과 충돌


왜 그의 사용 export HISTCONTROL과 당신의 사용 하지 않습니까? 차이점이 뭐야? 수출없이 저를 위해 일하고 있습니다. 궁금합니다.
felwithe

1
좋은 질문! 나는 또한 대답을 알고 싶습니다. 일반적으로 export하위 프로세스에서 변수를 사용할 수 있습니다. stackoverflow.com/q/1158091/552621 의 경우 HISTCONTROL, PROMPT_COMMAND등,이 변수는 어쩌면 (아이들 처리) 필요하지 않습니다를 수출 쉘 자체에 의해 사용됩니다.
Nour Wolf


3

에 다음을 추가하십시오 ~/.bashrc.

export HISTCONTROL=ignoredups

이를 위해 다음 명령을 사용할 수 있습니다.

nano ~/.bashrc

0

모든 새로운 명령을 확실하게 기록하는 것은 까다 롭습니다. 먼저 다음을 추가 ~/.profile하거나 유사하게 해야합니다 .

HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'

그런 다음에 추가해야합니다 ~/.bash_logout.

history -a
history -w
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.