Vì một số lý do, tôi không thể để hệ thống của mình giữ lịch sử BASH sau khi khởi động lại. Dưới đây là các phần có liên quan của tôi ~/.bashrc
:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
Theo như tôi có thể nói đó là tất cả các tùy chọn cần thiết (tôi biết tôi đã từng có thể giữ lịch sử trên nhiều lần khởi động lại mà không cần tất cả những điều này trong quá khứ). Tuy nhiên, mặc dù đã thêm các tùy chọn này một vài lần khởi động lại trước đây, tôi vẫn mất phần lớn lịch sử của mình sau khi khởi động lại. Nó không trống, nhưng nó không có 9999 dòng tôi có trước khi khởi động lại.
Trước khi bất cứ ai phàn nàn, vâng tôi đã đọc những câu hỏi này. Tôi đã thực hiện một số đề xuất của họ như được liệt kê ở trên, phần còn lại là không có ích hoặc không liên quan:
- Mất lịch sử Bash khi sử dụng histappend
- Làm thế nào để ngăn Bash thay đổi lịch sử?
- Điều gì xác định những gì hiển thị trong lệnh lịch sử bash?
- Làm cách nào để giữ lịch sử bash của tôi qua các phiên?
- lưu lịch sử bash, thường xuyên
Nếu bạn có thể có các lệnh liên quan khác, bạn có thể xem toàn bộ ~/.bashrc
ở đây .
Vì vậy, tôi đang thiếu gì? Tại sao lịch sử của tôi không được lưu? Nếu bất cứ ai nghĩ rằng một tập tin khác có thể có liên quan cho tôi biết và tôi sẽ đăng nó. Tôi đã kiểm tra bằng cách chạy grep -i hist \.*
trong $HOME
đó cho thấy .
tệp duy nhất có chứa chuỗi hist
hoặc HIST
là .bashrc
.
Tôi đang chạy Linux Mint Debian Edition, GNU bash, phiên bản 4.2.36 (1) -release (x86_64-pc-linux-gnu) và trình giả lập thiết bị đầu cuối yêu thích của tôi (trong trường hợp có liên quan) terminator
.
CẬP NHẬT:
Theo đề xuất của @ mpy trong các bình luận, tôi đã thay đổi ~/.bashrc
để đặt HISTFILE=~/bash_history
trái ngược với mặc định ~/.bash_history
và điều đó dường như giải quyết vấn đề cho các vỏ tương tác . Shell đăng nhập vẫn hiển thị hành vi tương tự, với lịch sử cắt ngắn ở 500
các dòng. Tuy nhiên, không HIST
có biến liên quan nào được đặt trong các tệp có liên quan:
$ for f in /etc/profile ~/.profile ~/.bash_profile ~/.bash_login; do \
echo -ne "$f :"; echo `grep HIST $f`; \
done
/etc/profile :
/home/terdon/.profile :grep: /home/terdon/.profile: No such file or directory
/home/terdon/.bash_profile :grep: /home/terdon/.bash_profile: No such file or directory
/home/terdon/.bash_login :grep: /home/terdon/.bash_login: No such file or directory
$ grep -r HIST /etc/profile.d/ <-- returns nothing
Vì vậy, tại sao là thiết lập HISTSIZE
và HISTFILESIZE
trong ~/.bashrc
không đủ, trừ khi tôi dứt khoát thiết lập $HISTFILE
một cái gì đó khác hơn so với mặc định ~/.bash_history
?
history
lệnh, đầu ra bạn thấy giống hệt với những gì bạn thấy, đang chạy cat .bash_history
, ngoài số dòng? Tôi có nghĩa là history
lệnh danh sách thời gian tem hoặc thông tin khác? Lý do tôi hỏi là, nếu bạn thấy những thứ bí truyền này, có nghĩa là, có một mô-đun / chức năng / chương trình khác, đang làm rối tung lịch sử vỏ và một phiên bản sai hoặc lỗi của bất cứ điều gì, có thể gây cho bạn sự đau buồn .
;)
: Hãy thử một tệp khác là HISTFILE, không phải mặc định ~/.bash_history
. Giải thích rất có cấu trúc: Tôi giả sử bash là shell mặc định của bạn, vì vậy khi hệ thống bắt đầu, shell không tương tác là cha mẹ của phiên X của bạn (tôi cũng giả sử bạn sử dụng X), sẽ không biết gì về tùy chọn histappend (vì .bashrc chỉ đọc bằng các shell tương tác), miễn là shell cha này chạy mọi thứ đều ổn, nhưng sau khi chấm dứt (tức là dừng hệ thống), nó sẽ ghi đè ~/.bash_history
(mặc định) và làm rối tung lịch sử của bạn ...