Làm thế nào để đồng bộ lịch sử lệnh thiết bị đầu cuối trong bash?


13

Tôi đã cố gắng tìm kiếm ~/.bash_historycác lệnh gần đây của mình trong khi ở phiên cuối nhưng chúng không có ở đó. Tôi đoán điều này là do tôi có nhiều phiên thiết bị đầu cuối mở.

Có cách nào để tôi có thể đồng bộ hóa (ví dụ: đồng bộ hóa đẩy hoặc đồng bộ hóa ghi) lịch sử lệnh của phiên cuối hiện tại vào tệp bash_history (không đóng phiên và mất môi trường đó) không?

(Nó có ý tưởng tương tự từ xa với cách synclệnh lưu trữ các sửa đổi hệ thống tệp trên một số hệ thống.)

Tôi tưởng tượng rằng tôi có thể thiết lập bash để lưu lại lịch sử nhiều phiên nhưng khả năng đẩy bộ đệm lịch sử hiện tại vẫn sẽ hữu ích trong các tình huống khi bạn đang làm việc trên một máy mới và bạn vô tình quên thiết lập bash theo cách bạn có thể muốn .


Tôi đã thử history -a lệnh shell dựng sẵn nhưng bằng cách nào đó bây giờ tôi nhận được 'quyền bị từ chối' trên .bash_historytệp, sau đó.
n611x007

Câu trả lời:


19

Thêm dòng này vào .bashrc:

export PROMPT_COMMAND="history -a; history -n"

Mở thiết bị đầu cuối mới và kiểm tra.

Giải trình

  • history -a nối các dòng lịch sử mới vào tập tin lịch sử.
  • history -nnói bashđể đọc các dòng không được đọc từ tệp lịch sử vào danh sách lịch sử hiện tại của phiên.
  • PROMPT_COMMAND: nội dung của biến này được chạy dưới dạng lệnh thông thường trước khi bashhiển thị dấu nhắc. Vì vậy, mỗi lần sau khi bạn thực thi một lệnh, history -a; history -nsẽ được thực thi và bashlịch sử của bạn được đồng bộ hóa.

cảm ơn! Tôi không biết tại sao trước đây tôi lại bị từ chối nhưng với các thiết bị đầu cuối mới, điều này dường như hoạt động như mong đợi! Tôi đoán bình thường tôi cũng có thể sử dụng history -atrong một thiết bị đầu cuối với bashrc chưa sửa đổi.
n611x007

Khi nào thì người ta phải bắt đầu lo lắng về ý nghĩa hiệu suất của việc này? (Tôi đang nghĩ về các thiết bị cấp thấp, không chắc cái này có giá quá lớn.)
n611x007

1
Ngoài ra, bạn có thể đã có một lệnh nhanh chóng, trong trường hợp này tốt hơn là sử dụngexport PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
Fabian

Nếu ${PROMPT_COMMAND}trống, điều này gây ra lỗi vì hàng đầu;
Boris Däppen

@ BorisDäppen đã đúng, nhưng điều này dễ dàng được khắc phụcexport PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.