- stinkpot lưu lịch sử lệnh Bash vào SQLite để quản lý không phụ thuộc phiên làm việc, đồng thời cho phép tìm lại nhanh bằng TUI tìm kiếm
- Loại bỏ máy chủ đồng bộ, AI, trình quản lý dotfiles·script và kho lưu trữ KV của Atuin, chỉ giữ các tính năng cần thiết và triển khai bằng khoảng 400 dòng Go
- Có thể nhập lịch sử Bash hiện có bằng
stinkpot import, và khi nhấnCtrl+Rthì TUI tìm kiếm ngược sẽ mở ra - Trên NixOS, công cụ cung cấp module home-manager; ở các môi trường khác, khởi tạo bằng
eval "$(stinkpot init)"trong.bashrc - Cơ sở dữ liệu được lưu tại
~/.local/share/stinkpot; nếu bị hỏng sau khi nâng cấp, có thể xóa rồi nhập lại lịch sử
Tách riêng chỉ những tính năng cần từ Atuin
- stinkpot bắt đầu từ trải nghiệm dùng Atuin nhưng chỉ cần quản lý lịch sử độc lập với phiên và TUI tìm kiếm
- Không bao gồm máy chủ đồng bộ, Atuin AI, trình quản lý dotfiles, trình quản lý script hay kho lưu trữ KV
- Tính năng đồng bộ cũng không được dùng vì cấu hình và lệnh chạy khác biệt đáng kể giữa các máy
- Dự án được viết bằng khoảng 400 dòng Go, với tỷ lệ ngôn ngữ trong kho là Go 82.5% và Nix 17.5%
- Tên gọi được lấy từ
stinkpot, một loài rùa nhỏ - Để tăng tốc tìm kiếm ngược, kế hoạch thực thi SQLite dùng covering index thay vì B-tree tạm thời để sắp xếp
Cài đặt và tìm kiếm lịch sử
- Từ mã nguồn, có thể build bằng lệnh sau
go build -o stinkpot .
- Người dùng NixOS home-manager có thể import module
homeManagerModules.defaultđược cung cấp - Ở các môi trường khác, thêm lệnh khởi tạo sau vào
.bashrc
eval "$(stinkpot init)"
- Có thể nhập lịch sử Bash hiện có bằng lệnh sau
stinkpot import
- Khi nhấn
Ctrl+Rtrong shell, TUI tìm kiếm sẽ mở ra- Di chuyển bằng
↑·↓và chọn bằngTabhoặcEnter - Sau khi chọn, nhấn
Enterlần nữa để thực thi lệnh - Hủy bằng
Esc
- Di chuyển bằng
- DB lịch sử được lưu tại
~/.local/share/stinkpot- Nếu DB bị hỏng sau khi nâng cấp, hãy xóa tệp rồi chạy lại
stinkpot import
- Nếu DB bị hỏng sau khi nâng cấp, hãy xóa tệp rồi chạy lại
1 bình luận
Ý kiến trên Lobste.rs
?ở dấu nhắc và thấy Atuin hỏi có muốn bật chế độ AI không, lúc đó mới nhận ra nó đã phình to đến mức nàoXin kiếu. Cảm ơn vì đã giới thiệu, giờ tôi đã chuyển sang stinkpot
Đặc biệt tôi thích việc tạo ra một binary tối giản tĩnh đơn giản chỉ với 400 dòng mã Go. Go nhìn chung là một ngôn ngữ tuyệt vời, và tôi cũng sẽ thử dùng stinkpot
Tôi đã dùng hstr khoảng 15 năm và gần đây đang chuyển sang fzf. Bản thân SQLite thì rất tuyệt, nhưng tôi không hiểu vì sao lại cần nó cho mục đích này
File lịch sử mặc định không có cấu trúc, nhưng SQLite có thể lưu dữ liệu như mã thoát và thời điểm kết thúc, đồng thời xử lý nhanh việc khử trùng lặp khi chèn hoặc cập nhật thời điểm thực thi khi chạy lại cùng một lệnh
Về lý thuyết, có thể vất vả khôi phục ngữ cảnh từ lịch sử lệnh, nhưng nếu có thể tra cứu nhanh lịch sử shell theo từng thư mục dự án thì sẽ khá hữu ích
Dù vậy, ưu điểm là nó vẫn hoạt động tốt, nhưng có lẽ tôi đã lâu không cập nhật
cwdkhông. Đây là lý do duy nhất tôi dùng Atuin: có thể lấy thư mục làm tiêu chí cho lịch sử lệnhSau khi
cdvào một dự án, tôi có thể tiếp tục ngay từ chỗ đã dừng trước đó, và điều này đặc biệt hữu ích khi chạy lại những lệnh dài có nhiều tham sốcwdđược ghi lại, vìbash_historymặc định không có thông tin nàyNếu được, tôi muốn thêm một giấy phép nguồn mở rồi tích hợp nó vào experimental oils readline. Sau khi hoàn thành widget động, một trong những TODO ưu tiên cao nhất cần xử lý là lịch sử lệnh
Dù hiếm, vẫn có lúc cần xóa vài dòng lệnh khỏi lịch sử shell; với cách cũ, tôi có thể mở trực tiếp
bash_historyvà xóa các dòng đó. Tôi muốn biết stinkpot có lệnh xóa lịch sử hay khôngNgoài trường hợp dùng hơi đặc biệt này, bản thân dự án trông vẫn khá thú vị