방법 : 무제한 Bash / shell 기록? 정의하는 방법이 있습니까?

Bash에서 무제한 히스토리를 정의하는 방법이 있습니까?



답변

이것을 .bashrc(Linux) 또는 .bash_profile(MacOS)에 추가하십시오 .

export HISTFILESIZE=
export HISTSIZE=

거기에 무제한 역사. 현재 27000 개의 항목이 있습니다 🙂

보낸 사람 man bash:

경우 HISTFILESIZE설정되지 않는 경우, 절단이 수행되지 않습니다.

즉, .bash_history절대로 잘리지 않습니다

HISTSIZE문서화 된 것을 찾을 수는 없지만에도 동일하게 적용됩니다 .

내가 시도 할 또 다른 깔끔한 기능은 다음과 같습니다.

경우 HISTTIMEFORMAT변수가 설정, 타임 스탬프는 역사의 주석 문자로 표시된 이력 파일에 기록됩니다, 그래서 그들은 다음과 같이 쉘 세션에 걸쳐 보존 할 수있다 :

export HISTTIMEFORMAT="%F %T "

이미 시도한 경우 알려주십시오 …


답변

( https://stackoverflow.com/a/19533853/128597 에서 답변을 다시 게시 )

수년에 걸쳐 많은 크고 추악한 반복과 이상한 일이 일어난 후에, 나는 이것을 .bashrc 의 간결한 섹션으로 만들었습니다 .

먼저 .bashrc의이 섹션을 주석 처리하거나 제거 해야합니다 (Ubuntu의 기본값). 그렇지 않으면 screen세션 실행과 같은 특정 환경에서 여전히 기록이 잘립니다.

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

둘째, 이것을 .bashrc의 맨 아래에 추가 하십시오 :

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

참고 : 모든 명령은 실행 직후에 기록되므로 실수로 암호를 붙여 넣은 경우 기록 기록을 피하기 위해 “kill -9 %%”만 할 수 없으므로 수동으로 제거해야합니다.

또한 각 bash 세션은 전체 히스토리 파일을 메모리에로드하지만 히스토리 파일이 10MB로 증가하더라도 ( 시간이 오래 걸리는 경우) bash 시작 시간에 큰 영향을 미치지 않습니다.


답변

~ / .bashrc에 포함 :

# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=

이 답변은 다음 기준을 만족합니다.

  1. 별도의 마스터 이력 (세션이 이력을 방해 할 수 없음)

  2. 자동 기록 작성 (핫키 없음)

  3. 드문 쓰기 (각 명령 뒤에 추가 없음)

배경

대화식 시작시 $HISTFILESIZE숫자로 설정된 경우 bash $HISTFILE는 해당 숫자로 잘립니다 . 대화식 닫기에서 쉘 옵션 histappend이 설정되면 bash는에 $HISTSIZE행을 추가 $HISTFILE하고 그렇지 않으면 겹쳐 씁니다 $HISTFILE.

OSX (터미널)에 대한 팁

터미널에서 탭을 만들 때마다 ~/.bash_profile읽습니다. 이는 bash가 계속 읽지 않습니다 ~/.bashrc. 에 다음 줄을 추가하십시오 ~/etc/bash_profile.

# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc

화면 팁

screen을 사용하는 경우 구성 파일은 ~ / .screenrc입니다. 화면에 기록을 기록하려면 bash 시작 파일을 제공하고 기록을 기록하는 로그인 쉘을 사용하도록 설정하면됩니다.

# use bash, make it a login shell
defshell -bash


답변

다른 개념 (적용 할 수 없음)이지만 shell-sinkunlimited 사용시 히스토리 를 가질 수 있습니다 .


답변