Lệnh tương tự được liệt kê trong lịch sử của tôi nhiều lần. Làm thế nào tôi có thể tránh điều này? Tôi biết điều đó có thể thông qua HISTCONTROL
nhưng tôi đã không tìm đúng cách.
Lệnh tương tự được liệt kê trong lịch sử của tôi nhiều lần. Làm thế nào tôi có thể tránh điều này? Tôi biết điều đó có thể thông qua HISTCONTROL
nhưng tôi đã không tìm đúng cách.
Câu trả lời:
Từ bash
trang người đàn ông:
LỊCH SỬ
Một danh sách các giá trị được phân tách bằng dấu hai chấm kiểm soát cách các lệnh được lưu trong danh sách lịch sử. Nếu danh sách các giá trị bao gồm
ignorespace
, các dòng bắt đầu bằng ký tự khoảng trắng sẽ không được lưu trong danh sách lịch sử. Giá trị của cácignoredups
dòng nguyên nhân khớp với mục lịch sử trước đó sẽ không được lưu. Một giá trịignoreboth
là tốc ký choignorespace
vàignoredups
. Giá trị củaerasedups
làm cho tất cả các dòng trước khớp với dòng hiện tại bị xóa khỏi danh sách lịch sử trước khi dòng đó được lưu. Bất kỳ giá trị không có trong danh sách trên được bỏ qua. Nếu HISTCONTROL không được đặt hoặc không bao gồm giá trị hợp lệ, tất cả các dòng được đọc bởi trình phân tích cú pháp shell được lưu trong danh sách lịch sử, tuân theo giá trị của HISTIGNORE. Các dòng thứ hai và tiếp theo của lệnh ghép nhiều dòng không được kiểm tra và được thêm vào lịch sử bất kể giá trị của HISTCONTROL.
Vì vậy, đặt dòng sau đây trong ~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
hầu hết thời gian nó sẽ có tác dụng nếu .bashrc được sửa đổi nhưng đó không phải là trường hợp tất cả các thời gian.
source ~/.bashrc && source ~/.bash_profile
Dán cái này trong ~/.bashrc
:
export HISTCONTROL=ignoredups
Thay vào đó bạn có thể sử dụng ignoreboth
. Điều này nó viết tắt cho cả hai ignorespaces
(các lệnh bắt đầu bằng khoảng trắng) và ignoredups
(trùng lặp).
Tôi thích ignoredups
bản thân mình hơn vì tôi thấy hành vi mặc định của việc bỏ qua các lệnh có khoảng trắng ở phía trước khá khó chịu khi tôi sao chép lệnh ra khỏi trang web và nó không được lưu vì tôi cũng vô tình sao chép vào một khoảng trắng .... Nhưng để mỗi người của họ.
ignoredups
dòng nguyên nhân khớp với mục lịch sử trước đó không được lưu . Nó chỉ loại bỏ các dòng giống hệt nhau liên tiếp.
Đưa điều này vào ~/.bashrc
sẽ áp dụng giải pháp của @ alvin trong các phiên khác nhau dưới dạng wlell
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
export HISTCONTROL
và của bạn không? Có gì khác biệt? Nó hoạt động cho tôi mà không xuất khẩu, tôi chỉ tò mò
export
làm cho biến có sẵn cho các quy trình phụ. stackoverflow.com/q/1158091/552621 Trong trường hợp HISTCONTROL
, PROMPT_COMMAND
, vv, các biến này được sử dụng bởi các vỏ thân như vậy có lẽ xuất khẩu chúng (cho trẻ em xử lý) là không cần thiết.
export HISTCONTROL=erasedups
Để đơn phương ghi lại mọi lệnh mới là khó khăn. Đầu tiên bạn cần thêm
~/.profile
hoặc tương tự:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Sau đó, bạn cần thêm vào ~/.bash_logout
:
history -a
history -w