답변:
bash 기록의 동작을 이해하려면 먼저 다음을 알아야합니다.
기본 설정을 사용하면 히스토리와 관련된 bash 세션의 수명주기는 다음과 같습니다.
당신이 관찰 한 겉보기 비결정론 적 행동은 대부분 히스토리 파일의 내용이 항상 마지막 닫힌 bash 세션의 히스토리이고 bash는 시작 중에 히스토리 파일 만 읽기 때문입니다.
시작 및 종료 프로세스에 대한 자세한 설명은 bash 매뉴얼 을 읽으십시오 .
기본 설정에서는 bash의 기본 설정을 의미합니다. 배포판 에서이 동작을 변경 하는 .bashrc
(또는 /etc/bash.bashrc
)를 제공했을 수 있습니다 .
쉘 옵션 histappend
을 사용하면 히스토리 파일을 덮어 쓰지 않고 bash에게 추가하도록 지시 할 수 있습니다. histappend
명령을 사용 하여 활성화 할 수 있습니다 shopt -s histappend
. 이 옵션을 항상 활성화하려면 명령 .bashrc
(또는 다른 초기화 파일)에 명령을 넣어야합니다 . shopt
명령에 대한 자세한 내용 은bash 매뉴얼
가능 histappend
하게하는 것이 비결정론적인 행동을 많이 감소 시키지는 않습니다. 모든 bash 세션에는 여전히 메모리에 자체 기록이 있기 때문입니다. 대부분 동기화 된 bash 기록이있을 수 있습니다. 모든 bash 프로세스가 스택 오버플 로 에서 스레드 에서 대부분 동기화 된 기록을 갖도록하는 방법에 대한 안내서가 있습니다 .
내장 명령 history
을 사용하면 bash에게 파일에서 메모리로 기록을 읽거나 메모리에서 파일로 기록을 읽도록 명시 적으로 지정할 수 있습니다. 예를 들어 : history -r
파일의 내용을 읽고 메모리의 기록에 추가합니다. history -w
현재 기록을 메모리에서 파일로 쓰고 이전 내용을 덮어 씁니다. 이것은 기본적으로 종료 중에 발생합니다. history
명령에 대한 자세한 내용 은bash 매뉴얼
완전성을 위해 다음은 히스토리 동작을 수정하는 내부 변수 목록입니다.
HISTFILE
: 기록을 읽고 쓸 파일입니다.HISTFILESIZE
: 히스토리 파일의 최대 행 수.HISTSIZE
: 메모리에서 히스토리의 최대 라인 수.HISTCONTROL
, HISTIGNORE
, HISTTIMEFORMAT
이 논의와 관련이 없습니다. 자세한 내용은 bash 매뉴얼 을 읽으십시오 ..bashrc
파일을 사용하여 다시 실험하십시오 . 배포판에서의 일부 설정이 변경되었을 수 있습니다 /etc/bash.bashrc
. 쉘 옵션을 구체적으로 확인하십시오 histappend
.
http://www.gnu.org/software/bash/manual/bashref.html#Using-History-Interactively
터미널 중 하나를 사용하여 기록 파일을 쓰는 방법을 조작 할 수 있습니다. 즉, 기록을 저장하려는 터미널에서 "history -a"또는 "history -w"를 실행 한 다음 "history -r" 다른 터미널. 당신이하고 싶은 일에 달려 있습니다.
AFAIK, bash 명령은 SSH 세션이 종료 된 후에 저장됩니다. 따라서 세션이 비정상적으로 종료되면 (예 : 네트워크 장애로 인해) 명령이 저장되지 않습니다. SSH 세션에 대해 이야기하고 있습니다. 로컬 터미널은 유사한 접근법을 사용할 수 있습니다.
여러 세션을 동시에 열면 한 세션에서 입력 한 명령이 다른 세션에서는 보이지 않습니다. 그러나 세션을 종료하면 다시 열 때 이러한 명령이 표시됩니다.