Giải pháp này có vẻ khá hứa hẹn với tôi sau khi tôi đã sử dụng nó được một thời gian.
Thêm phần sau vào của bạn ~/.bashrc tập tin:
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
fc_override_prev_command_if_no_args() {
nếu [ $# -eq 0 ]; sau đó
fc
lịch sử -d $(wc -l < ~/.bash_history)
lịch sử -w
lịch sử -c
lịch sử -r
khác
fc $@
fi
}
bí danh fc=fc_override_prev_command_if_no_args
Điều này làm là gì thay đổi hành vi của fc lệnh khi nó được gọi mà không có đối số. Khi nó được gọi với các đối số, tôi đã làm cho nó hoạt động như nó thường hoạt động, vì nếu không thì hành vi của nó sẽ bị sai lệch nếu không có nếu/khác/fi khối và không có khác một phần nó sẽ không làm gì cả.
Mặt khác, khi không có đối số nào được cung cấp, thì fc lệnh được thực thi, mục cuối cùng từ lịch sử bash bị hủy và lịch sử đã lưu trong bộ nhớ cache được tải lại từ tệp.
Phần gán lại biến PROMPT_COMMAND tôi đã mượn từ đây và tôi thấy nó hữu ích vì các lệnh đã gửi có sẵn ngay lập tức trong lịch sử bash của các thiết bị đầu cuối hiện đang mở khác với bash (OK, không thực sự ngay lập tức, nhưng ngay cả một hành động như gửi KÝ HIỆU tín hiệu bằng Ctrl+C là đủ để tải lại bộ đệm lịch sử).
Vui lòng chỉnh sửa câu trả lời này hoặc nhận xét nếu bạn thấy một số phần của giải pháp không cần thiết.
Liên kết đến ý chính với đoạn mã trên có sẵn đây