Lịch sử xáo trộn


15

Trong chế độ gui, khi một người dùng mở nhiều thiết bị đầu cuối, làm thế nào để các thiết bị đầu cuối viết lại tệp lịch sử của người dùng đó? Lý do tôi hỏi là bởi vì, hoàn toàn có thể là trong mỗi thiết bị đầu cuối, người dùng cuối cùng thực hiện các lệnh khác nhau. Vì vậy, tập tin lịch sử cuối cùng sẽ lưu các lệnh từ tất cả các thiết bị đầu cuối hoặc chỉ từ cái đầu tiên được mở? Hoặc có một số loại chương trình khác được sử dụng để giải quyết tình huống này?

Câu trả lời:


11

Nó phụ thuộc hoàn toàn vào cách vỏ chọn xử lý nó

bashtheo mặc định sẽ ghi đè lên tệp lịch sử với lịch sử cục bộ của mỗi shell khi thoát, vì vậy shell cuối cùng để thoát sẽ thắng. Các histappendtùy chọn sẽ gây ra nó để phụ thêm vào lịch sử chủ thay vì ( shopt -s histappend).

zsh thực hiện tương tự theo mặc định và có một vài tùy chọn để xử lý nó:

  • appendhistory - Lịch sử của mỗi shell được thêm vào tệp lịch sử chính khi thoát khỏi shell
  • incappendhistory - Tệp lịch sử chính được cập nhật mỗi khi một dòng được thực thi trong bất kỳ shell nào, thay vì đợi cho đến khi shell đó thoát ra
  • sharehistory- Thích incappendhistory, nhưng cũng kéo các thay đổi từ tệp lịch sử chính vào tất cả các shell đang chạy, vì vậy bạn có thể chạy một lệnh trong một shell và sau đó nhấn Upvào shell khác và xem nó

Bây giờ hãy nói cho tôi biết làm thế nào để làm điều đó trong Bash;)
tante

1
@tante Không shopt -s histappendhoạt động?
Michael Mrozek

0

Ban đầu tôi có ý tưởng này từ cuốn sách "Công cụ năng lượng Unix" của O'Reilly.

Trong tôi .profileđặt:

export HISTFILE=$HOME/.sh_hist.$$

Mỗi lần tôi .profileđược đọc, tôi nhận được một tệp lịch sử mới có tên là PID của phiên của tôi. Nếu tôi có nhiều thông tin đăng nhập, mỗi lần đăng nhập sẽ có một tệp lịch sử duy nhất. Hoạt động trong kshbash.

Nếu bạn chỉ mở các thiết bị đầu cuối mới trong phiên X, những thiết bị đó thường không đăng nhập, nhưng bạn có thể định cấu hình chúng để hoạt động như các vỏ đăng nhập. Ví dụ, rxvt +lssẽ bắt đầu rxvtnhư một vỏ đăng nhập. Kiểm tra tài liệu cho bất kỳ thiết bị đầu cuối nào bạn đang sử dụng.

Ngoài ra, trừ khi bạn đang sử dụng một .logouthoặc một .bash_logouttệp (hoặc một số phương tiện khác) để dọn dẹp, cuối cùng bạn sẽ có một đống .sh_histtệp.


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.