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
HISTFILESIZE
không được đặt, không thực hiện cắt ngắn.
Điều đó có nghĩa .bash_history
là 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
HISTTIMEFORMAT
biế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 HISTSIZE
biế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
, HISTFILESIZE
có 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ư screen
phiê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=2000
Thứ 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 --norc
sẽ 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 $HISTFILE
thành số đó. Khi đóng tương tác, nếu tùy chọn shell histappend
được đặt, bash sẽ nối $HISTSIZE
cá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 ]] && . ~/.bashrc
Nế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 -bash
Một khái niệm khác (có thể không áp dụng được) nhưng bạn có thể có unlimited
lịch sử khi sử dụng shell-chìm .