lịch sử không được bảo tồn trong zsh


16

Bất cứ khi nào tôi mở một phiên bản mới của một thiết bị đầu cuối, lịch sử là trống rỗng. Tại sao vậy? Tôi có cần phải thiết lập một cái gì đó? Trong bash không cần điều này, mặc dù.


Không chắc chắn về zsh, nhưng theo mặc định bashghi vào các tệp lịch sử của anh ấy khi thoát , điều đó có nghĩa là nếu bạn chưa sử dụng nó trước đó và mở một số shell, tất cả chúng sẽ hiển thị lịch sử cho đến khi ít nhất một lần đăng xuất, từ đó viết tệp lịch sử của nó.
DopeGhoti

Câu trả lời:


24

Bash và zsh có mặc định khác nhau. Zsh không lưu lịch sử vào một tệp theo mặc định.

Khi bạn chạy zsh mà không có tệp cấu hình, nó sẽ hiển thị giao diện cấu hình. Trong giao diện cấu hình này, chọn

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

sau đó xem lại các cài đặt được đề xuất và chọn

# (0)  Remember edits and return to main menu (does not save file yet)

Lặp lại cho các menu con khác để hoàn thành (2), (3) tổ hợp phím và (4), sau đó chọn

(0)  Exit, saving the new settings.  They will take effect immediately.

từ menu chính.

Các cài đặt liên quan đến lịch sử được đề xuất là

HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory

Tôi sẽ sử dụng một tên khác cho tệp lịch sử, để chỉ ra tệp lịch sử của zsh. Và 1000 dòng có thể được tăng lên trên một hệ thống hiện đại.

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory

Nhân tiện, những dòng này đi vào ~/.zshrc.


8

Mặc dù câu trả lời hiện tại là chính xác, tôi nghĩ rằng có thể đáng để thêm rằng có thể có một lựa chọn tốt hơn là appendhistorylưu lịch sử của bạn và đây là SHARE_HISTORY.

Từ các tài liệu SHARE_HISTORY"cả hai nhập các lệnh mới từ tệp lịch sử và cũng khiến các lệnh đã nhập của bạn được thêm vào tệp lịch sử". Điều này có nghĩa là các shell cũng biết về lịch sử của nhau mà không cần phải đóng cái hiện tại hoặc mở cái mới.

Vì vậy, tất cả cùng nhau bạn sẽ thiết lập nó như thế này:

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY

1
+1 và chào mừng bạn đến với U / L, nhưng cá nhân tôi thích INC_APPEND_HISTORY_TIME, ghi vào lịch sử từ tất cả các thiết bị đầu cuối như trên, nhưng lịch sử đó "sẽ không có sẵn ngay lập tức từ các phiên bản khác của shell đang sử dụng cùng một tệp lịch sử". Điều này có ý nghĩa hơn với tôi, bởi vì sau đó tôi có thể đi qua lịch sử của từng thiết bị đầu cuối một cách độc lập, nhưng tất cả vẫn được ghi lại.
Sparhawk

2
Cảm ơn! Vâng đủ công bằng và tôi hoàn toàn có thể thấy lý do tại sao INC_APPEND_HISTORY_TIMEcó thể có ý nghĩa logic hơn. Tôi có lẽ không nên nói "tốt hơn", tôi đoán đó chỉ là vấn đề sở thích cá nhân!
bert

0

khi bạn lần đầu tiên chuyển từ bash sang zsh, lịch sử bash của bạn sẽ không tiếp tục. Vì vậy, tất cả lịch sử bạn có trong bash vẫn nằm trong tệp lịch sử của bash. zsh bắt đầu ghi lại lịch sử từ khi bạn bắt đầu sử dụng nó làm vỏ.

Nếu bạn không thiết lập nó để ghi lại lịch sử, bạn có thể chạy lại trình hướng dẫn cấu hình và cho zsh biết lịch sử sẽ lưu bao nhiêu. Thay đổi tên của ~ / .zshrc hoặc xóa nó để có một phát bắn mới vào trình hướng dẫn.


0

Nếu nó không hoạt động và bạn đã có tất cả những thứ này, hãy thử:

fc -W

Điều đó ghi lịch sử hiện tại vào tập tin lịch sử. Và nếu bạn nhận được:

zsh: locking failed for /home/username/.zsh_history: permission denied

sau đó là thời gian để kiểm tra quyền trên tệp trên thư mục mẹ.

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.