Câu trả lời:
và tôi chỉ nhớ một câu trả lời khác, đây là câu trả lời thực sự cho câu hỏi của bạn.
nếu bạn có "khoảng trống" trong HISTCONTROL, thì bash sẽ không nhớ bất kỳ dòng nào bắt đầu bằng ký tự khoảng trắng. nó sẽ không xuất hiện ngay cả trong lịch sử của shell hiện tại, chứ chưa nói đến việc được lưu vào $ HISTFILE.
ví dụ: tôi đã xuất HISTCONTROL = 'ignboth: erasingups' trong ~ / .bashrc của tôi
Dưới đây là chi tiết từ trang bash man:
HISTCONTROL 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 lưu trong danh sách lịch sử. Nếu danh sách các giá trị bao gồm bỏ qua không gian, các dòng bắt đầu bằng ký tự khoảng trắng thì không lưu trong danh sách lịch sử. Giá trị của bỏ qua gây ra dòng phù hợp với mục lịch sử trước đó để không được lưu. Giá trị của ignboth là tốc ký cho không gian và bỏ qua. Một giá trị của việc xóa bỏ gây ra tất cả các dòng trước khớp với dòng hiện tại để được 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 là bỏ đặ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ử, tùy thuộc vào giá trị của LỊCH SỬ. Dòng thứ hai và tiếp theo của một dòng nhiều lệnh ghép không được kiểm tra và được thêm vào lịch sử bất kể giá trị của HISTCONTROL.
Dưới đây là một vài bài học lịch sử tôi học được từ việc googling:
Bạn có thể đặt lịch sử để bỏ qua các chuỗi nhất định. Trong ví dụ này, tôi đã bỏ qua các lệnh ls, passwd và bất kỳ lệnh nào được tiền tố bởi không gian ký tự.
xuất HISTIGNORE = "ls: passwd:"
Để tắt lịch sử cho phiên của bạn, bạn có thể phát hành:
xuất HISTSIZE = 0
Nếu bạn chỉ muốn xóa lệnh cuối cùng khỏi lịch sử, thì bạn có thể nhấn Up-arrow, theo sau là Ctrl - U(xóa đến đầu dòng), sau đó Up-arrowmột lần nữa.
Bạn có thể xóa bất kỳ dòng cá nhân nào khỏi lịch sử như thế này. Chỉ cần sử dụng mũi tên lên hoặc tìm kiếm hoặc bất cứ điều gì để biến nó thành dòng lệnh hiện tại đang được chỉnh sửa, sau đó nhấn Ctrl - Uvà sau đó Up-arrowhoặc Down-arrowđể chuyển sang dòng lịch sử khác.
Tôi tình cờ phát hiện ra điều này một ngày trước. Tôi không biết liệu nó được ghi lại hay không.
Tuy nhiên, nói chung, sẽ ít rắc rối hơn khi không lưu lại lịch sử của trình bao hiện tại với:
HISTFILE=/dev/null
Bạn có thể bỏ đặt HISTFILE
biến. Từ man bash
:
LỊCH SỬ Tên của tệp trong đó lịch sử lệnh được lưu (xem NGAY- Câu chuyện dưới đây). Giá trị mặc định là ~ / .bash_history. Nếu không đặt, lịch sử lệnh không được lưu khi trình bao tương tác lối thoát hiểm
Tôi không nghĩ rằng điều này ngăn lệnh xuất hiện trong lịch sử shell cục bộ trước khi shell thoát ra.
Tôi thấy rằng không ai viết phương pháp này, vì vậy tôi sẽ.
history -d $((HISTCMD-1)) && history -d <command or number of command>
history -d
xóa các mục được đề cập từ lịch sử.
HISTCMD
lưu trữ Command_number của lệnh sẽ được thực thi tiếp theo. Vì vậy, (HISTCMD-1) đề cập đến lệnh được thực hiện cuối cùng.
Tôi đã làm một bộ phim bash ngắn cho thấy cách thức hoạt động của nó: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2
Sau khi chạy lệnh và vì nó cũng tự xóa lệnh, sau đó đi lên bằng mũi tên sẽ không hiển thị lệnh, vì vậy nếu bạn có kế hoạch sử dụng thường xuyên, tốt nhất nên tạo bí danh:
alias hc='history -d $((HISTCMD-1)) && history -d $1'
Sau đó, bạn có thể làm:
$ hc command