stinkpot - SQLite 기반 Bash 셸 히스토리 검색기
요약
SQLite를 기반으로 Bash 셸 히스토리를 관리하는 경량 도구인 stinkpot을 소개합니다. 기존 도구인 Atuin의 비대함을 지양하고, Go 언어를 사용하여 단순하고 빠른 정적 바이너리를 제공하는 것이 특징입니다.
핵심 포인트
- SQLite를 활용해 종료 코드, 실행 시각 등 구조화된 데이터 저장 가능
- Go 언어로 구현된 약 400줄 규모의 가볍고 단순한 정적 바이너리
- 디렉터리(CWD)별 명령 기록 조회 및 문맥 복원 가능성 제시
- 기존 Atuin 대비 기능적 비대함을 줄인 미니멀리즘 지향
이번 주 프롬프트에서 실수로 ?를 입력했다가 Atuin이 AI 모드를 활성화할지 묻는 걸 보고 얼마나 비대해졌는지 깨달았음
사양하겠음. 소개해 준 덕분에 이제 stinkpot으로 전환했음
셸 명령 기록을 잃어버려 고생한 적이 있어 이 프로젝트가 정말 마음에 듦. atuin.sh도 써봤지만 그다지 만족스럽지 않았음
특히 Go 코드 400줄로 단순한 정적 최소 바이너리를 만든 점이 좋음. Go는 전반적으로 훌륭한 언어이며, stinkpot도 사용해 볼 예정임
hstr나 fzf처럼 기록 파일을 직접 읽는 도구와 비교해 여기서 SQLite를 사용하면 무엇이 더 좋아지는지 궁금함
hstr를 약 15년간 사용했고 최근에는 fzf로 옮겨가고 있음. SQLite 자체는 아주 좋아하지만 이 용도에 필요한 이유는 이해하지 못했음
Bash가 명령 실행 후 매번 기록을 파일에 쓰도록 하면 fzf만으로도 비슷하게 구현할 수 있음
기본 기록 파일은 구조화돼 있지 않지만 SQLite에는 종료 코드와 종료 시각 같은 데이터를 저장할 수 있고, 삽입 시 중복 제거 또는 같은 명령을 다시 실행했을 때 실행 시각 갱신 같은 처리도 빠르게 수행 가능함
각 기록 항목의 현재 작업 디렉터리를 저장하고 색인하는 용도를 생각해 봤음
이론적으로는 명령 기록에서 문맥을 힘들게 복원할 수 있지만, 프로젝트 디렉터리별로 셸 기록을 빠르게 조회할 수 있다면 꽤 유용할 것 같음
확실히 사용해 볼 만함. Atuin은 거의 관심 없는 기능으로 가득한 기능 동물원이 됐음
그래도 잘 작동한다는 장점은 있지만, 업데이트한 지 오래됐을 가능성이 큼
Atuin은 예전부터 알았지만 이번 주에야 처음 써봤음. 지금 추세라면 곧 이메일까지 읽기 시작할 것 같음
훌륭해 보이는데 기록을 cwd로 필터링할 수 있는지 궁금함. 명령 기록의 기준을 디렉터리로 삼을 수 있다는 점이 Atuin을 쓰는 유일한 이유임
프로젝트로 cd한 뒤 이전에 멈춘 지점부터 바로 이어갈 수 있으며, 매개변수가 많은 긴 명령을 다시 실행할 때 특히 유용함
fish는 이 기능을 기본 제공하며 아주 유용함
개인적으로 선호하는 동작은 아니지만 한 가지 제약 아래 구현 가능함. stinkpot 설치 이후 실행한 명령만 cwd가 기록되며, 기본 bash_history에는 이 정보가 없음
다른 사람들이 안심하고 코드를 사용하게 하려면 프로젝트에 라이선스를 추가하는 편이 좋음
괜찮다면 공개 라이선스를 추가한 뒤 experimental oils readline에 통합하고 싶음. 동적 위젯을 완성한 다음 처리할 최우선 TODO 중 하나가 명령 기록임
기록에서 명령을 얼마나 쉽게 삭제할 수 있는지 궁금함. SQLite 데이터베이스에서 SQL로 직접 행을 지워야 하는지 알고 싶음
드물지만 셸 기록에서 명령 몇 줄을 삭제해야 할 때가 있으며, 기존 방식에서는 bash_history를 직접 열어 해당 줄을 지울 수 있었음. stinkpot에 기록 삭제 명령이 있는지 궁금함
이런 특이한 용도와 별개로 프로젝트 자체는 상당히 흥미로워 보임
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기