Câu trả lời:
Thêm phần này vào .bashrc(Linux) hoặc .bash_profile(MacOS):
export HISTFILESIZE=
export HISTSIZE=Có bạn đi, lịch sử không giới hạn. Hiện tại tôi có 27000 mục :)
Từ man bash:
Nếu
HISTFILESIZEkhông được đặt, không thực hiện cắt ngắn.
Điều đó có nghĩa .bash_historylà không bao giờ bị cắt ngắn
Ngoài ra, điều tương tự cũng áp dụng cho HISTSIZE, mặc dù tôi không thể tìm thấy tài liệu đó.
Một tính năng thú vị khác mà tôi sẽ thử là:
Nếu
HISTTIMEFORMATbiến được đặt, tem thời gian được ghi vào tệp lịch sử, được đánh dấu bằng ký tự nhận xét lịch sử, để chúng có thể được lưu giữ trong các phiên shell, như sau:
export HISTTIMEFORMAT="%F %T "Hãy cho tôi biết nếu bạn đã thử nó ...
gdb; nếu bạn đặt một HISTSIZEbiến, nó sẽ lấy nó là 0, do đó vô hiệu hóa hoàn toàn kích thước lịch sử.
                    export, HISTFILESIZEcó số lượng dòng (không phải byte) và việc cắt bớt  tệp lịch sử xảy ra khi bạn đặt biếnHISTFILESIZE (và khi thoát vỏ). Vì vậy, đừng đặt nó hai lần trong tệp cấu hình của bạn với các giá trị khác nhau ...
                    (đăng lại câu trả lời của tôi từ https://stackoverflow.com/a/19533853/128597 )
Sau nhiều lần lặp lại lớn, xấu xí và các trường hợp cạnh kỳ lạ trong nhiều năm qua, giờ đây tôi đã có một phần ngắn gọn của .bashrc dành riêng cho việc này.
Trước tiên, bạn phải nhận xét hoặc xóa phần này trong .bashrc (mặc định cho Ubuntu). Nếu bạn không, thì một số môi trường nhất định (như screenphiên chạy ) vẫn sẽ cắt ngắn lịch sử của bạn:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000Thứ hai, thêm phần này vào cuối .bashrc của bạn:
# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"Lưu ý: mọi lệnh được viết ngay sau khi chạy, vì vậy nếu bạn vô tình dán mật khẩu, bạn không thể "giết -9 %%" để tránh ghi lịch sử, bạn sẽ cần xóa thủ công.
Cũng lưu ý rằng mỗi phiên bash sẽ tải tệp lịch sử đầy đủ trong bộ nhớ, nhưng ngay cả khi tệp lịch sử của bạn tăng lên 10MB (sẽ mất nhiều thời gian dài ), bạn sẽ không nhận thấy nhiều ảnh hưởng đến thời gian khởi động bash của mình.
HISTFILESIZE, đây là lý do tại sao bạn nên loại bỏ bất kỳ sự kiện nào xảy ra ngoại trừ sự kiện bạn muốn. Nó cũng sẽ bị cắt ngắn khi thoát khỏi shell (nhưng điều đó được mong đợi). Và bạn không cần export.
                    bash --norcsẽ cắt lại lịch sử.
                    export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"để tách lịch sử shell mỗi phiên (dựa trên tên máy chủ và tên tty). Tất nhiên tôi phải tạo thư mục ~ / hist trước.
                    PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
                    Bao gồm trong ~ / .bashrc :
# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=Câu trả lời này thỏa mãn các tiêu chí sau:
một lịch sử tổng thể riêng biệt (không phiên nào có thể làm gián đoạn lịch sử của bạn)
viết lịch sử tự động (không có phím nóng)
ghi không thường xuyên (không nối thêm sau mỗi lệnh)
Khi khởi động tương tác, nếu $HISTFILESIZEđược đặt thành một số, hãy bash cắt ngắn $HISTFILEthành số đó. Khi đóng tương tác, nếu tùy chọn shell histappendđược đặt, bash sẽ nối $HISTSIZEcác dòng vào $HISTFILE, nếu không nó sẽ ghi đè $HISTFILE.
Mỗi khi một tab được tạo trong Terminal, ~/.bash_profileđược đọc, điều đó có nghĩa là bash không tiếp tục đọc của bạn ~/.bashrc. Thêm dòng sau vào ~/etc/bash_profile:
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrcNếu bạn sử dụng màn hình, tệp cấu hình của bạn là ~ / .screenrc. Nếu bạn muốn màn hình ghi lại lịch sử, bạn chỉ cần đặt nó để sử dụng trình đăng nhập sẽ cung cấp nguồn cho các tệp khởi động bash của bạn (và ghi lại lịch sử của bạn).
# use bash, make it a login shell
defshell -bashMột khái niệm khác (có thể không áp dụng được) nhưng bạn có thể có unlimitedlịch sử khi sử dụng shell-chìm .