답변:
히스토리 항목이 표시되지 않는 가장 큰 원인은 HISTFILE
아무것도 설정 하지 않거나 HISTSIZE
0 으로 설정 하는 것이 아니라 동일한 시스템에 두 번 로그인 한 후 두 번째 bash 인스턴스 (아무것도 또는 전혀 수행하지 않은)로 종료하는 것입니다. 많이 했어 기본적으로 Bash는 내역을 병합하지 않으며 두 번째 Bash 종료 .bash_history
는 첫 번째 Bash 종료에 의해 그렇게 멋지게 업데이트 된 것을 덮어 씁니다 .
이를 방지하기 위해 덮어 쓰기 대신 내역 파일에 추가 할 수 있습니다. histappend
쉘 옵션을 사용할 수 있습니다 .
histappend shell 옵션이 활성화 된 경우 (아래의 SHELL BUILTIN COMMANDS 아래에서 shopt 설명 참조) 행이 내역 파일에 추가되고, 그렇지 않으면 내역 파일을 덮어 씁니다.
더 많은 세부 사항 이 답변 사용하는 방법을 포함하여 HISTSIZE
, HISTFILESIZE
및 HISTCONTROL
, 중복 등을 크기를 제어 할
히스토리 크기를 수정하려면 두 개의 BASH 변수 HISTSIZE
를 사용하십시오 HISTFILESIZE
(보통로 설정 .bashrc
).
BASH 매뉴얼 페이지의 설명 :
HISTSIZE 명령 기록에서 기억 해야하는 명령의 수입니다 (아래 기록 참조). 값이 0이면 명령이 기록 목록에 저장되지 않습니다. 0보다 작은 숫자 값은 모든 명령이 기록 목록에 저장됩니다 (제한 없음). 셸은 시작 파일을 읽은 후 기본값을 500으로 설정합니다.
HISTFILESIZE 히스토리 파일에 포함 된 최대 행 수. 이 변수에 값이 할당되면 필요한 경우 기록 파일은 가장 오래된 항목을 제거하여 해당 줄 수를 초과하지 않도록 잘라냅니다. 쉘이 종료 될 때 기록 파일도이 크기로 잘립니다. 값이 0이면 히스토리 파일이 0으로 잘립니다. 숫자가 아닌 값과 0보다 작은 숫자 값은 잘림을 금지합니다. 쉘은 시작 파일을 읽은 후 기본값을 HISTSIZE 값으로 설정합니다.
예를 들어 .bashrc
파일에 다음 설정이 있습니다.
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
이 일이 있었지만 해결책이 여기에 나열되지 않았습니다. 원인은 단순한 복사 + 붙여 넣기 문제였습니다. 다른 문서에서 명령을 복사하고 클립 보드에 여분의 공백이있었습니다. 어떤 이유로 우분투는 명령을 기록 파일에 저장하지 않았습니다.
위의 이미지는 클립 보드 형태의 google docs 명령이었습니다. 이 명령은 실행되었지만 내 기록에서 생략되었습니다. 방금 돌아가서 공백없이 명령을 선택한 다음 bash 기록에 나타납니다.
HISTCONTROL
환경 변수가 ignorespace
또는로 설정되어 있지 않은지 확인하십시오 ignoreboth
.
$ echo $HISTCONTROL
ignoredups #this is ok
파일 ~/.bash_profile
또는 ~/.profile
파일 에서 값을 설정하여 수정할 수 있습니다 .
HISTCONTROL=ignoredups
에서 bash
매뉴얼 페이지
히스 트롤
히스토리 목록에서 명령이 저장되는 방법을 제어하는 콜론으로 구분 된 값 목록.
값 목록에가 포함되어 있으면
ignorespace
공백 문자로 시작하는 행이 기록 목록에 저장되지 않습니다.값을 지정
ignoredups
하면 이전 기록 항목과 일치하는 행이 저장되지 않습니다.의 값은 및의
ignoreboth
약어입니다 .ignorespace
ignoredups
값을 지정
erasedups
하면 해당 행을 저장하기 전에 현재 행과 일치하는 모든 이전 행이 기록 목록에서 제거됩니다.위 목록에없는 값은 무시됩니다.
경우
HISTCONTROL
해제, 또는 유효한 값을 포함하지 않는 모든 라인의 값 쉘 기록 목록에 저장됩니다 파서, 주제별로 읽을HISTIGNORE
. 여러 줄 복합 명령의 두 번째 및 그 이후 줄은 테스트되지 않으며의 값에 관계없이 기록에 추가됩니다HISTCONTROL
.