여러 개의 Konsole 터미널을 사용합니다. 그리고 나는 모든 터미널에 입력 한 모든 명령이 명령 기록에 저장되기를 원하므로 다음에 열리는 konsole에 모든 명령이 포함됩니다. 각 터미널이 다른 터미널의 명령 기록을 덮어 쓰지 못하게하기 위해 다음과 같이 설정했습니다..bashrc
# avoid duplicates and commands starting with space
export HISTCONTROL=ignoredups:erasedups:ignorespace
# append history entries..
shopt -s histappend
#My machine reboots without warning sometimes.Hence to save commands instantaneously.
export PROMPT_COMMAND="history -a"
export HISTSIZE=1000
PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1
프롬프트에서 명령 번호를 확인하기 위해 마지막 줄을주었습니다. 명령 번호 600을 넘지 못했지만 여전히 이전 명령 중 일부가 역사에서 사라지고 있습니다. 반복적으로 제공되는 많은 명령이 있지만에서 예상대로 ignoredups
프롬프트에서 명령 no를 증가시키지 않습니다. 그러나 오래된 명령은 여전히 사라지고 기록의 명령 수는 항상 500 이상으로 남아 있습니다.
.bash_history
파일은 여전히 ignoredups에도 불구하고 중복을 많이 포함되어 있습니다.
PS : 에코의 출력 $HISTSIZE
과는 $HISTFILESIZE
모두=1000
업데이트 : 위의 항목에서 문제를 발견했습니다 .bashrc
. 그냥 전화 history -a
로 PROMPT_COMMAND
간단하게 .bash_history 파일에 마지막으로 새 명령을 추가합니다. 그래서 ignoredups
및 erasedups
영향을주지 않습니다.
어떤 방법으로도 모든 터미널에서 중복없이 .bash_history에 쓸 수 있습니까? 한 터미널에서 발행 한 명령이 다른 병렬 실행 터미널에도 나타나기 때문에 각 명령 프롬프트에서 전체 기록을로드하고 history -r
다시 작성하고 싶지 않습니다 history -w
. 결합 된 명령이 새 터미널에만 나타나기를 원합니다.
내 역사가 500으로 줄어드는 퍼즐이 해결되었습니다. 나는이 기계에 ssh 할 때마다 발생하는 것을 알았습니다. .bash_profile
다음 항목으로를 작성하면 이 문제가 해결되었습니다.
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
이제 내 .bashrc는 내가 ssh 할 때마다 실행됩니다. 그리고 히스토리 파일 크기는 이제 단조 증가하고 있습니다.
bug-bash
이 질문을 게시 한 후 1 년 메일 링리스트 : lists.gnu.org/archive/html/bug-bash/2013-07/msg00092.html