기본 bash에는 내가 기록에서 사용한 명령 중 일부가 없는 것처럼 보이지만 다른 명령은 있는 이유는 무엇입니까?

기본 bash에는 내가 기록에서 사용한 명령 중 일부가 없는 것처럼 보이지만 다른 명령은 있는 이유는 무엇입니까?

맥에서는 시에라.

HIST볼 수 있는 관련 설정이 없습니다 .

~ @ Magni (jcollum) 
$ env|grep HIST

~ @ Magni (jcollum) 
$ cat ~/.bash_profile | grep HIST

~ @ Magni (jcollum) 

하지만 내 이력에는 어제 했던 일이 다시 시작한 후에는 존재하지 않습니다. 내가 명령을 내릴 때마다 명령 앞에 공백을 넣었는지는 정말 의심스럽습니다.

여기에 문제를 해결하는 방법을 알려주는 게시물이 있다는 것을 알고 있지만 알고 싶습니다.이런 식으로 발생합니다.

curl예를 들어 어제 실행한 a를 grep하면 아무것도 없습니다.

~ @ Magni (jcollum) 
$ history | grep curl 
166  curl -X POST -d [email protected] -d password=********** http://localhost:3000/login
503  hg curl 
519  history | grep curl 

400개의 명령 전? 나는 지난 주에 bash를 12번이나 사용했다는 것을 알고 있지만 curl(그리고 이번 주에 수백 개의 명령을 실행할 만큼 bash를 사용하지도 않습니다).

기본적으로 나는 당황스럽고 왜 내가 한 일이 그렇게 많이 누락되었는지 모르겠습니다. 하나의 bash 인스턴스에서만 기록이 기록될 수 있습니까?

답변1

하나의 bash 인스턴스에서만 기록이 기록될 수 있습니까?

그런 일이 일어나고 있습니다. 히스토리를 변경하려고 노력하지 않는 한 bash에서 히스토리가 작동하는 방식은 다음과 같습니다.

  • Bash가 시작되면 기록 파일에서 저장된 기록을 로드합니다.
  • 명령이 실행될 때마다 bash 메모리의 기록에 추가됩니다.
  • Bash가 종료되면 누적된 기록을 기록 파일에 저장합니다.

이제 두 개의 bash 인스턴스를 시작한다고 가정해 보겠습니다. 둘 다 시작할 때 기록 파일을 로드합니다. 둘 다 자신이 실행하는 명령을 자체 기록에 추가합니다. 하나의 인스턴스가 종료되면 이전 기록과 자체 명령을 기록 파일에 저장합니다. 두 번째 인스턴스가 종료되면 이전 기록과 함께 저장되었습니다.그것은자신의 명령을 기록 파일에 저장합니다. 이렇게 하면 종료된 첫 번째 인스턴스의 기록이 지워집니다.

Bash의 기록 저장 메커니즘은 지나치게 단순합니다. 귀하의 기록 라인은 실행 중인 다른 모든 인스턴스의 영향을 받습니다. 어느 것이든 마지막 종료가 다른 인스턴스의 기록을 삭제합니다. 솔루션에는 전체 메모리 내 기록으로 기록 파일을 덮어쓰는 대신 기록 파일에 새 기록을 추가하거나 실행되자마자 기록 파일에 줄을 추가하는 것이 포함됩니다. 보다여러 터미널 창에서 bash 기록 보존그리고여러 터미널 창에서 bash 기록 보존이 변형과 다른 변형을 구현하는 몇 가지 방법에 대해 설명합니다.

가장 간단한 해결책은 기본적으로 정상적인 방식으로 기록을 저장하는 zsh를 실행하는 것입니다. 특히 Apple이 2009년 이후 출시된 버전의 라이센스를 좋아하지 않기 때문에 오래된 버전의 bash에 갇혀 있는 macOS를 실행하고 있기 때문에 이것을 권장합니다.

관련 정보