Lịch sử Bash không giới hạn [đã đóng]


350

Tôi muốn .bash_historytập tin của tôi là không giới hạn. ví dụ: Vì vậy, tôi luôn có thể quay lại và xem cách tôi xây dựng / định cấu hình một cái gì đó, hoặc lệnh đó là gì, hoặc một số lệnh đã phá vỡ thứ gì đó vài tuần trước. Làm cách nào để thay đổi cài đặt này?



1
Bash là một ngôn ngữ lập trình và đây không phải là về lập trình?
NeilG

Câu trả lời:


307

Đặt HISTSIZEHISTFILESIZEtrong .bashrc thành một chuỗi trống:

HISTSIZE= 
HISTFILESIZE=

Trong bash 4.3 trở lên, bạn cũng có thể sử dụng HISTSIZE=-1 HISTFILESIZE=-1:

n.  Setting HISTSIZE to a value less than zero causes the history list to be
    unlimited (setting it 0 zero disables the history list).

o.  Setting HISTFILESIZE to a value less than zero causes the history file size
    to be unlimited (setting it to 0 causes the history file to be truncated
    to zero size).

12
(xuất PROMPT_COMMAND = 'history -a') có thể xóa các lệnh để bash lịch sử ngay lập tức.
tàn ác

3
Thiết lập HISTSIZE= HISTFILESIZE=kết quả trong việc vô hiệu hóa hoàn toàn lịch sử bash, ít nhất là đối với tôi.
Philipp Ludwig

5
Cài đặt @PhilippLudwig đã HISTSIZE=-1 HISTFILESIZE=-1vô hiệu hóa lịch sử của tôi, trong khi HISTSIZE= HISTFILESIZE=thực hiện thủ thuật. CentOS 7 đây.
Seether

1
@PhilippLudwig Tôi nghĩ thay vì HISTSIZE= HISTFILESIZE=bạn nênexport HISTSIZE= export HISTFILESIZE=
Matzz

3
@Seether Câu trả lời ghi rõ "Trong bash 4.3 trở lên ...". CentOS 7 đã bash 4.2.x.
Villapx

426

Sau nhiều lần lặp lại lớn, xấu xí và các trường hợp cạnh kỳ lạ trong nhiều năm qua, giờ đây tôi đã có một phần ngắn gọn của .bashrc dành riêng cho việc này.

Trước tiên, bạn phải nhận xét hoặc xóa phần này trong .bashrc (mặc định cho Ubuntu). Nếu bạn không, thì một số môi trường nhất định (như screenphiên chạy ) vẫn sẽ cắt ngắn lịch sử của bạn:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

Thứ hai, thêm phần này vào cuối .bashrc của bạn:

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

Lưu ý: mọi lệnh được viết ngay sau khi chạy, vì vậy nếu bạn vô tình dán mật khẩu, bạn không thể chỉ "giết -9 %%" để tránh ghi lịch sử, bạn sẽ cần xóa thủ công.

Cũng lưu ý rằng mỗi phiên bash sẽ tải tệp lịch sử đầy đủ trong bộ nhớ, nhưng ngay cả khi tệp lịch sử của bạn tăng lên 10MB (sẽ mất nhiều thời gian dài ), bạn sẽ không nhận thấy nhiều ảnh hưởng đến thời gian khởi động bash của mình.


1
@AquariusPower - Hãy thử chính xác những gì ở trên, làm trống HISTFILESIZE=HISTSIZE=thay vì -1 và đảm bảo bạn không có bất kỳ khai báo nào khác về các thông số đó trong .bashrc hoặc .bash_profile hoặc .profile.
fotinakis

2
Thủ phạm tại .bashrc, tôi đã thiết lập nó sau khi trên một tệp khác được tải bởi .bashrc ..., hiện đang hoạt động! cám ơn!
Sức mạnh Bảo Bình

10
Thêm nó vào hệ thống bash tiêu chuẩn của tôi và thêm lịch sử hiện tại cũng rất hay, vì vậy sau khi cấu hình, hãy chạycat ~/.bash_history >>~/.bash_eternal_history
Jean-Christophe Meillaud

2
Để giữ lại lịch sử lịch sử, hãy khởi tạo tệp lịch sử với lịch sử hiện tại của bạn.
Arthur

3
Rất cám ơn - thực tế là việc thiết lập HISTFILESIZE(và có thể HISTSIZE) sẽ có hiệu lực ngay lập tức không thể được nhấn mạnh quá mức .
Attie

37

Như Jörg Beyer đã đề cập ở trên, HISTSIZEHISTFILESIZElà chìa khóa.

Ngoài ra, bạn nên chắc chắn kiểm tra biến môi trường HISTCONTROL, cho phép bạn thực hiện những điều thú vị như không lưu trữ các lệnh lịch sử trùng lặp ( HISTCONTROL=erasedups). Không có điểm nào có lịch sử không giới hạn nếu bạn phải duyệt qua hàng trăm dòng cd ..hoặc tương tự.

Liên kết: ở đây , và làm việc với lịch sử bash . Câu hỏi thường gặp về biến đổi bash cũng đáng để duyệt .


13
Những dòng cd cung cấp cho bạn ngữ cảnh cho các lệnh được ban hành. Chúng thực sự rất hữu ích. Tôi không thể hiểu tại sao bất cứ ai cũng muốn xóa chúng, trừ khi cách duy nhất bạn từng sử dụng là sử dụng một lệnh tại một thời điểm.
iconoclast

@simont Tôi cũng sử dụng tùy chọn bỏ qua với HISTCONTROL sau đó sử dụng tùy chọn này cho bất cứ điều gì tôi không muốn ghi vào lịch sử, chẳng hạn như mật khẩu.
bigtunacan

6
Giữ các dòng theo thứ tự là rất hữu ích nếu bạn sử dụng lại các chuỗi lệnh. Ví dụ: Ctrl-rsomechars Ctrl-o Ctrl-o Ctrl-o Ctrl-o. Đó là lý do tại sao tôi giữ các bản sao trong lịch sử.
Stéphane Gourichon

1
@ StéphaneGourichon Ctrl-ođể làm gì?
Ciprian Tomoiagă

4
@ CiprianTomoiagă Ctrl-ochạy lệnh tại dấu nhắc và hiển thị ngay lệnh ngay sau lệnh trước đó trong lịch sử. Một lợi ích là sau khi sử dụng Ctrl-rđể tìm một lệnh cũ (có thể sử dụng mũi tên lên và xuống để di chuyển sang các lệnh lân cận trong lịch sử), việc Ctrlnhấn và nhấn onhiều lần để chạy lại một loạt lệnh trước đó, ngay cả trong vòng lặp vô hạn nếu bạn muốn. Xem thêm GNU Readline - Wikipedia
Stéphane Gourichon

22

Có (ít nhất) hai lọ env có liên quan ở đây:

  • HISTSIZE: số lượng mục trong tệp lịch sử
  • HISTFILESIZE: số lượng dòng trong tệp lịch sử

Tôi nghĩ rằng chúng ta có thể đồng ý rằng thuật ngữ không giới hạn thường giống như rất lớn (hoặc bạn có lưu trữ tệp không giới hạn?). Vì vậy, chỉ cần đặt các giá trị rất lớn.


23
"Cần lưu ý rằng 1000000000 chỉ bằng vô hạn đối với các giá trị vô cùng nhỏ. - sepp2k" lol. vâng, tôi hài lòng với các giá trị vô hạn nhỏ (giả sử, một tháng sử dụng thiết bị đầu cuối thường xuyên).
Francis Haart

6
một tháng sử dụng thiết bị đầu cuối thường xuyên là một phần vô cùng nhỏ của vô cực. Tôi có thể nói rằng thời gian sử dụng thiết bị đầu cuối thường xuyên tương đương với một giá trị vô cùng rất nhỏ. Nhưng thời gian sử dụng thiết bị đầu cuối thường xuyên là đủ tốt cho lịch sử vỏ của tôi. ;)
iconoclast

2
Các phiên bản cũ hơn của zsh ít nhất sẽ bị sập nếu bạn đặt HISTSIZE và / hoặc HISTFILESIZE quá lớn vì nó cố phân bổ đủ bộ nhớ. Điều này trở nên có liên quan khi chạy các công cụ sử dụng zsh làm vỏ của chúng (ví dụ dbx).
Brian Vandenberg
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.