Để hiểu hành vi của lịch sử bash trước tiên bạn phải biết những điều sau:
- Có lịch sử trong tập tin lịch sử.
- Có lịch sử trong bộ nhớ của một quá trình bash.
- Lịch sử trong bộ nhớ của một quá trình bash không được đồng bộ hóa với lịch sử trong bộ nhớ của bất kỳ quy trình bash nào khác.
- Lịch sử trong bộ nhớ của quá trình bash không được đồng bộ hóa với lịch sử trong tệp, trừ khi được yêu cầu rõ ràng hoặc trong một số sự kiện cụ thể (xem bên dưới).
Sử dụng các cài đặt mặc định, vòng đời của phiên bash liên quan đến lịch sử như sau:
- Trong quá trình khởi động bash sẽ đọc tệp lịch sử. Nội dung của tệp lịch sử hiện nằm trong bộ nhớ của quá trình bash.
- Trong quá trình sử dụng bình thường, chỉ có lịch sử trong bộ nhớ bị thao túng.
- Trong khi tắt máy, lịch sử trong bộ nhớ được ghi vào tệp lịch sử, ghi đè bất kỳ nội dung nào trước đó của tệp lịch sử.
Hành vi dường như không xác định mà bạn đã quan sát chủ yếu là do nội dung của tệp lịch sử luôn là lịch sử của phiên bash đóng cuối cùng và bash chỉ đọc tệp lịch sử trong khi khởi động.
Đọc hướng dẫn bash để được giải thích chi tiết hơn về quá trình khởi động và tắt máy.
Lưu ý rằng với cài đặt mặc định, tôi có nghĩa là cài đặt mặc định từ bash. Phân phối của bạn có thể đã cung cấp .bashrc
(hoặc /etc/bash.bashrc
) thay đổi hành vi này.
Bằng cách kích hoạt tùy chọn shell, histappend
bạn có thể yêu cầu bash nối thêm thay vì ghi đè tệp lịch sử. Bạn có thể kích hoạt histappend
bằng cách sử dụng lệnh shopt -s histappend
. Để tùy chọn này luôn được bật, bạn phải đặt lệnh trong .bashrc
(hoặc tệp khởi tạo khác). Đọc thêm về shopt
lệnh trong hướng dẫn bash
Lưu ý rằng việc kích hoạt histappend
sẽ không làm giảm nhiều hành vi dường như không xác định. Điều này là do mỗi phiên bash vẫn có lịch sử riêng trong bộ nhớ. Có thể có một lịch sử bash chủ yếu được đồng bộ hóa. Có một hướng dẫn làm thế nào để có được mọi quy trình bash để có một lịch sử được đồng bộ hóa chủ yếu trong một luồng trên tràn ngăn xếp .
bằng cách sử dụng lệnh dựng sẵn, history
bạn có thể nói rõ ràng bash để đọc lịch sử từ tệp này sang bộ nhớ hoặc ghi từ bộ nhớ vào tệp. Ví dụ: history -r
sẽ đọc nội dung của tệp và nối nó vào lịch sử trong bộ nhớ. history -w
sẽ ghi lịch sử hiện tại từ bộ nhớ vào tập tin, ghi đè nội dung trước đó. Đây là cơ bản những gì xảy ra trong khi tắt máy. Đọc thêm về history
lệnh trong hướng dẫn bash
Để hoàn thiện ở đây là danh sách các biến nội bộ sửa đổi hành vi lịch sử:
HISTFILE
: tập tin để đọc và ghi lịch sử vào.
HISTFILESIZE
: số dòng tối đa cho tệp lịch sử.
HISTSIZE
: số dòng tối đa cho lịch sử trong bộ nhớ.
HISTCONTROL
, HISTIGNORE
, HISTTIMEFORMAT
: Không có liên quan để thảo luận này. Đọc hướng dẫn sử dụng bash để biết chi tiết.