histappend를 사용할 때 배쉬 히스토리 손실


18

나는 많은 역사를 유지하고 histappend싶습니다 .bashrc. 대부분의 경우 모든 쉘이 추가되어 역사가 쌓여서 모든 것이 잘 작동합니다. 그러나 가끔씩 새로운 쉘을 시작하고 전체 히스토리를 잃어버린 것을 발견합니다. 종종 마지막 쉘의 명령 중 일부만 포함하는 경우가 종종 있습니다. ). 이 때문에 .bash_history파일을 죽이는 다른 프로세스가 아닌 셸 종료에서 발생하는 것으로 의심 됩니다. 이 결론을 뒷받침하기 위해 프롬프트에 히스토리 명령 번호가 있으며 그 수가 줄어드는 것을 본 적이 없습니다.

비슷한 문제가 발생한 사람이 있습니까? 아니면 문제를 추적하는 방법에 대한 제안이 있으십니까?


답변:


13

내 질문에 대답 해 미안하지만 다른 답변은 실제로 문제를 해결하지 못합니다.

필자는 마침내 gnome-terminal자체 종료시 (예 : 파일> 종료, 'x'버튼, alt + F4), 심지어 여러 터미널을 빠르게 연속적으로 닫을 때만 발생한다는 것을 알았습니다 . ctrl-D를 사용하여 쉘을 닫을 때 발생하지 않으므로 터미널을 따라갈 수 있습니다.

잘 고정시킬 수 있다면 그놈 터미널 버그 보고서를 제출할 것입니다. 그동안 Google에서 온 다른 사람들에게 도움이 될 것입니다.


10

왜 이런 일이 발생하는지 모르지만 bash가 프롬프트를 표시 할 때마다 히스토리 파일에 쓰도록하여 ​​문제를 피할 수 있습니다.

PROMPT_COMMAND="history -a; history -n"

이것은 bash가 다음 명령을 요구할 때마다 히스토리 파일을 쓰고 (-a) 다시 읽습니다 (-n). 추가 이점 : 쉘 2의 히스토리에서 쉘 1에 명령 X가 표시됩니다.


GNU bash, 버전 3.00.15 (1)-릴리즈 (i686-redhat-linux-gnu)에서 작동하지 않음
David Mackintosh

2
"작동하지 않는"의 의미를 설명 할 수 있습니까?
innaM

3
귀하가 언급 한 추가 혜택은 많은 경우 단점입니다. 별도의 셸에서 완전히 별개의 두 가지 작업을 수행하고 기록을 혼합하고 싶지 않기 때문에 내가 찾고있는 행동이 아닙니다. 이것은 또한 아무것도 도움이되지 않을 것입니다. 역사가 사라지면 .bash_history의 내용이 삭제됩니다. 쉘 종료시 또는 PROMPT_COMMAND에 의해 쓰여 졌는지 여부는 중요하지 않습니다.
Cascabel

5
history -n색다른. 더 안정적 history -a; history -c; history -r입니다. 이것을 설명하기 위해, 나는 history -a당신 .bash_historyhistory -a모든 명령 후에 실행한다고 가정 할 때, 당신이 입력 한 모든 명령 을 입력 한 순서대로 입력 할 것 입니다. 도전은 쉘의 히스토리 아이디어를 .bash_history 파일과 동기화하는 것입니다. 이와 함께 간단 -c하고 -r문제가 큰 있다면이 저하 될 수 있다는 것입니다. -n새로운 줄을 잘못 식별하여 깨질 수 있습니다. (여기서 공간이 부족합니다!)
Aaron McDaid

4
(...를 사용하면 -n) 쉘 1에서 명령을 실행한다고 상상해보십시오 ls. 그런 다음 다른 쉘인 Shell Two에서을 실행 cd합니다. 이제, .bash_history 파일의 역사 때문에의 정확한 history -a당신의 PROMPT_COMMAND-가 포함됩니다 ls \n cd \n. 다음으로 쉘 One으로 돌아가서을 입력 pwd합니다. Shell One 명령 n 기록 ( ls) 만 있다고 생각 합니다 . 이제 기록에 두 개의 명령 ( lspwd) 이 있다고 생각 합니다. 그렇게 -n할 때 (내 역사에는 두 개의 명령이 있고 .bash_history에는 두 개의 명령이 있으므로 최신 상태입니다.)
Aaron McDaid

3

내 경험에 따르면 쉘은 종료시 기록 파일을 업데이트했습니다. 따라서 쉘의 초기 "역사"는 가장 최근에 종료 된 쉘의 히스토리보기에 의존합니다.

그 결과 다른 쉘이 시작 및 중지 된 방법에 따라 히스토리에서 명령을주고받을 수 있습니다.


2
나는 역사 파일이 어떻게 작성되는지 잘 알고 histappend있습니다. 이것이 내가 사용하고있는 질문에 명시한 이유 입니다. 문제는 예기치 않은 컨텐츠가 아니라 이전에 저장된 컨텐츠의 전체 손실입니다.
Cascabel

이것은 내가 왜 내 역사를 잃어 버렸는지를 설명해줍니다.
B Seven

1

나는 이것이 전에 일어난 것을 보았지만 주파수 증가에서 발생하는 디스크 오류의 문제였습니다. 드라이브에서 스캔을 실행합니다. 드라이브가 정상인 것으로 판명되면이 파일이 임의의 쉘 히스토리 한계를 초과하지 않는지 확인합니다.

그 일이 발생하지 않도록 할 수있는 것은 파일을 80 줄로 계속 잘라 내거나 기록을 원하는 많은 명령을 유지하는 것입니다.


이 문제가 발생하는 컴퓨터에 대한 루트 액세스 권한이 없지만 드라이브에 문제가 없다고 확신합니다. 내 홈 디렉토리는 실습실의 서버 (많은 RAID, 믿습니다)에 저장되고 nfs 마운트됩니다. "임의 쉘 히스토리 한계"란 무엇을 의미합니까? 이것은 모두 HISTSIZE 및 HISTFILESIZE 아래에서 잘 일어나고 있으며 둘 다 크게 설정했지만 intbash가 저장하는 것 보다 훨씬 아래에 있습니다.
Cascabel

데이비드 맥킨토시의 입장은 아마도 일어난 일이라고 할 수 있습니다.
Axxmasterr

1
나는 그것이 아니라고 전적으로 확신합니다. 마지막으로 종료 할 쉘에 수십 개의 명령이 있고, 이력 파일이 수백 개이고, HISTSIZE / HISTFILESIZE가 10000으로 설정된 경우, 내 기록에서 두 개의 명령만으로 끝나서 는 안됩니다.
Cascabel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.