.bash_history에 즉시 쓰기가 가능합니까?

.bash_history에 즉시 쓰기가 가능합니까?

나는 종종 아주 많은 터미널을 열고(현재 이 작업 공간에는 7개가 열려 있습니다) 최근에 방금 작성한 명령을 찾기 위해 history로 검색하는 경우가 많지만 터미널을 찾아 스크롤하고 싶지는 않습니다. grep일어나서 그것을 찾아보세요.

때로 터미널이 가 없이 닫히면 터미널 exit에 작성한 모든 내용이 손실됩니다. 때로는 종료된 터미널에 내가 작성한 내용이 필요할 때도 있었습니다.

각 터미널에서 즉시 쓰도록 만드는 방법이 있나요 .bash_history? 아니면 적어도 1분에 한 번, 아니면 그와 비슷한 것인가요?

답변1

간단한 해결책은 다음에 자세히 설명되어 있습니다.실시간으로 Bash 기록 업데이트.

해당 명령을 .bashrc 구성에 넣으라고 나와 있습니다.

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

첫 번째 명령은 기록 파일 모드를 추가로 변경하고 두 번째 명령은 history -a각 쉘 프롬프트에서 실행되도록 명령을 구성합니다. 이 -a옵션은 history현재/새 행을 기록 파일에 즉시 기록하도록 합니다.

에서man bash:

histappend 셸 옵션이 활성화된 경우(아래 SHELL BUILTIN 명령 아래 shopt 설명 참조) 행이 기록 파일에 추가되고, 그렇지 않으면 기록 파일을 덮어씁니다.

Zsh 관련:

답변2

이것을 당신의 .bashrc:

shopt -s histappend                      # append to history, don't overwrite it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

여기에 크레딧:https://stackoverflow.com/questions/103944/real-time-history-export-amongst-bash-terminal-windows/3055135

history -c실행 중인 세션의 기록을 지웁니다. 이렇게 하면 기록 카운터가 $HISTSIZE. 현재 실행 중인 세션 기록 history -r의 내용을 읽고 $HISTFILE삽입합니다. 이렇게 하면 의 줄 수만큼 기록 카운터가 증가합니다 $HISTFILE.

내 생각에 이는 명령을 거의 즉시 사용할 수 있다는 것을 의미한다고 생각합니다(첫 번째 터미널이 하나 있고 write echo 1, 두 번째 터미널이 echo 2있고 echo 3아래쪽 화살표를 두 번 누르면 echo 2사용할 수 있어야 합니다. 해당 터미널에서 명령을 실행해야 해당 터미널에 액세스할 수 있습니다). 작성되었습니다.

답변3

약 100,000개의 항목이 포함된 큰 기록 파일이 있고 기록 목록을 지우고 전체 기록 파일을 읽는 변형( history -c및 사용 history -r)은 프롬프트가 표시되기 전에 눈에 띄는(아마도 0.2초) 지연을 발생시킵니다. history -n기록 파일에서 새 줄만 읽도록 사용하는 것이 더 빠릅니다.

shopt -s histappend
PROMPT_COMMAND='history -a;history -n'

PROMPT_COMMAND쉘 변수이기 때문에 내보낼 필요가 없습니다.

답변4

다른 모든 답변에 대한 참고 사항(기본적으로 동일함):

PROMPT_COMMAND="history -a;$PROMPT_COMMAND"(또는 친구) 에 설정하면 .bashrc충분합니다.

history -a또한 현재 세션의 기록을 "스냅샷"하려고 할 때마다 수동으로 실행할 수 있습니다 .

항상 파일에 새 줄을 추가하고 덮어쓰지 않기 때문에 이 명령은 shopt -s histappend필요하지 않습니다 . history -a또한 적어도 Bash 4부터는 histappend기본 동작입니다.

관련 정보