추가 읽기

추가 읽기

여러 명령을 입력했는데 실행했을 때 history해당 명령이 없다는 것을 알았습니다.

명령이 (space)로 시작하는 경우 외에 명령이 기록에 기록되지 않는 경우는 무엇입니까?

답변1

이미 선행 공백을 언급했고 다른 답변에서는 퍼팅에 대해 언급했습니다.의도적으로설정 등 기록에 저장된 내용을 변경하고 HISTIGNORE간단히기록 끄기.

또 다른 상황은 동일한 사용자가 여러 대화형 셸을 실행하는 경우입니다. Z 셸에는 share_history여러 Z 셸 인스턴스가 공유 기록 파일을 업데이트할 수 있는 옵션이 있습니다. 파일을 다시 읽어 새 항목을 찾고 각 항목에 타임스탬프를 적용합니다.

Bourne Again 쉘에는 이러한 내장 기능이 없습니다.약간이 작업을 수행할 때 shenanigans를 사용하여 인쇄 프롬프트에서 명령을 실행하십시오. 이는 쉘이 자신 이외의 어떤 것도 기록 파일에 기록할 것을 기대하지 않으며 각 명령줄이 실행된 후에 기록이 업데이트되지 않는다는 점에서 기본 기록 파일 동작을 변경합니다.

특히 Bourne Again 셸의 기본 동작은 셸이 종료되거나 명령을 사용하여 명시적으로 지시된 경우에만 기록 파일을 업데이트합니다 history. 이는 사용자가 여러 대화형 셸 세션을 가질 때 하나의 셸이 다른 셸에서 작성한 기록을 덮어쓸 뿐 아니라 셸이 종료되지 않을 수도 있음을 의미합니다.깨끗하게기록 파일은 기록되지 않으므로 쉘의 비정상 종료와 기록 파일의 마지막(명시적) 업데이트 사이에 발생한 명령 기록이 손실됩니다.

추가 읽기

답변2

히스토리는 주로 쉘 매개변수에 의해 제어됩니다.

조직 통제

HISTCONTROL이 매개변수 중 하나입니다.

내용은 다음과 같습니다 man bash.

HISTCONTROL
     A  colon-separated  list of values controlling how commands are
     saved on the history list.  If  the  list  of  values  includes
     ignorespace,  lines  which begin with a space character are not
     saved in the history list.  A value of ignoredups causes  lines
     matching  the  previous history entry to not be saved.  A value
     of ignoreboth is shorthand for ignorespace and  ignoredups.   A
     value  of erasedups causes all previous lines matching the cur‐
     rent line to be removed from the history list before that  line
     is  saved.   Any  value  not  in the above list is ignored.  If
     HISTCONTROL is unset, or does not include a  valid  value,  all
     lines  read  by the shell parser are saved on the history list,
     subject to the value of HISTIGNORE.  The second and  subsequent
     lines  of a multi-line compound command are not tested, and are
     added to the history regardless of the value of HISTCONTROL.

입력하여 echo $HISTCONTROL설정 방법을 확인하세요.

  • 무시당하다- 서로 이어지는 동일한 명령을 무시합니다.
  • 공간을 무시하다- 말씀하신 대로 공백으로 시작하는 명령은 무시하세요.
  • 둘 다 무시- 위의 두 가지 모두
  • 문질러 지우는- 이전 명령을 다시 사용할 때 제거

내 생각엔 활성화했지만 erasedups나중에 재사용되었기 때문에 명령이 손실된 것 같습니다.

히스틴요

특정 명령이나 패턴이 기록에 나타나지 않도록 완전히 억제하는 것도 가능합니다.

echo $HISTIGNORE차단된 콘텐츠를 보려면 입력하세요 . 패턴 목록은 콜론으로 구분됩니다 :. 모드를 비활성화하는 것도 가능합니다(예: history*역사라는 단어로 시작하는 모든 명령).

장애 이력

그리고 역사여전히 비활성화할 수 있습니다.

이러한 시나리오 중 어느 것도 해당되지 않는 경우 기록에 완전히 보존되지 않은 명령 시퀀스를 추가하여 질문을 명확히 할 수 있습니다.

관련 정보