Cảnh báo: Đây không phải là một câu trả lời cho câu hỏi như nó đứng, mà là một gợi ý cho một cách tiếp cận mà bạn có thể thấy hữu ích.
Tôi cảm nhận được nỗi đau của bạn. Tôi cũng muốn theo dõi lịch sử Bash của mình và có thể nhớ lại các lệnh mà tôi có thể đã chạy từ lâu. Tôi đã phát triển một cách tiếp cận cho phép tôi giữ tất cả lịch sử Bash của mình trong một kích thước lịch sử hợp lý.
cài đặt lịch sử Bash của tôi là:
HISTCONTROL=ignoreboth:erasedups
HISTIGNORE="?:??:???:$HISTIGNORE"
Điều đó giúp giữ các mục cuối trong lịch sử Bash ở vị trí đầu tiên. Các lệnh như ls
ngắn hơn để gõ hơn để gọi lại, vì vậy không có điểm nào trong việc lưu trữ chúng (đó là những gì HISTIGNORE
dành cho). ignoreboth
là tốc ký cho ignorespace
và ignoredups
. Cái trước ngăn chặn các mục với một không gian hàng đầu kết thúc trong lịch sử. Tôi sử dụng nó cho các lệnh mà tôi biết tôi sẽ không bao giờ nhớ lại, hoặc không bao giờ muốn nhớ lại, như rm -rf *
:). Có nhiều thứ nữa mà tôi bỏ qua theo mặc định (không hiển thị), giúp giảm kích thước lịch sử.
Bất chấp các biện pháp đối phó ở trên, các bản sao vẫn kết thúc trong lịch sử của tôi (ví dụ: do nhiều vỏ Bash mở cùng một lúc). Tôi có một bộ đếm trong lời nhắc của tôi cho tôi thấy kích thước lịch sử hiện tại
PS1='\u@\h:\w:\!> '
(Mã liên quan là \!
, hay còn gọi là số lịch sử của lệnh này .) Điều đó cho tôi biết khi đến lúc phải 'dọn dẹp' (xem bước tiếp theo).
Tôi định kỳ 'dọn dẹp' lịch sử Bash của mình bằng cách chạy lệnh sau:
tac ~/.bash_history | awk '!seen[$0]++' | tac > ~/.bash_history.new && mv ~/.bash_history.new ~/.bash_history
(giả sử lịch sử Bash của bạn được lưu trữ trong ~/.bash_history
khóa học). Lệnh này loại bỏ trùng lặp trong khi tuân thủ thứ tự: các lệnh được sử dụng cuối cùng vẫn còn cuối cùng. Chỉ có bản sao cuối cùng (gần đây nhất) được giữ lại.
Với cách tiếp cận này, tôi đã có thể giữ tất cả lịch sử Bash của mình trong một kích thước lịch sử rất khiêm tốn từ 600 đến 1000 mục.