Đã hơn một lần tôi vô tình chạy một số lệnh và làm ô nhiễm lịch sử bash của tôi. Làm cách nào để đóng thiết bị đầu cuối của tôi mà không lưu lịch sử bash của tôi? Tôi đang sử dụng Fedora.
Đã hơn một lần tôi vô tình chạy một số lệnh và làm ô nhiễm lịch sử bash của tôi. Làm cách nào để đóng thiết bị đầu cuối của tôi mà không lưu lịch sử bash của tôi? Tôi đang sử dụng Fedora.
Câu trả lời:
Lịch sử của shell của bạn được lưu trong tệp được chỉ định bởi HISTFILEbiến. Vì thế:
unset HISTFILE
Điều này cũng áp dụng cho zsh, nhưng không áp dụng cho ksh, lưu vào tệp được chỉ định $HISTFILEkhi shell bắt đầu (và ngược lại, bạn quyết định lưu lịch sử của mình trong ksh sau khi bạn khởi động shell).
Câu trả lời ngắn:
Nhập vào dấu nhắc này:
$ kill -9 $$
Điều này sẽ giết chết vỏ của bạn ngay lập tức mà không cần vỏ có thể làm bất cứ điều gì như bẫy tín hiệu, lưu lịch sử, thực thi ~/.bash_logout, cảnh báo về các công việc đã dừng hoặc bất kỳ công cụ tốt nào.
Câu trả lời dài:
Lưu ý: Các tùy chọn này không loại trừ lẫn nhau; tất cả chúng có thể được sử dụng cùng một lúc.
Lựa chọn 1:
Nếu bạn là người cầu toàn khi làm xáo trộn tập tin lịch sử của mình, thì điều bạn có thể làm là sửa đổi HISTIGNOREbiến để bao gồm các chuỗi lệnh bạn không muốn ghi lại. Chẳng hạn, nếu bạn thêm HISTIGNORE='ls*:cd*'vào ~/.bashrcthì bất kỳ trường hợp nào lsvà cdkhông được chèn vào tệp lịch sử của bạn.
Lựa chọn 2:
Nếu bạn muốn điều khiển trên cơ sở từng lệnh, những lệnh nào bị bỏ lại trong lịch sử của bạn, bạn có thể đặt HISTCONTROL='ignorespace'sẽ bỏ qua bất kỳ dòng lệnh nào bắt đầu bằng khoảng trắng. Sử dụng ignorebothcũng sẽ bỏ qua các dòng lặp đi lặp lại. Sau đó, nhấn vào thanh dấu cách trước khi bạn nhập lệnh sẽ khiến nó không hiển thị trong tệp lịch sử của bạn.
Tùy chọn 3:
Nếu bạn chỉ muốn làm như vậy khi bạn đóng thiết bị đầu cuối, vỏ thoát ra ngay lập tức, bạn có thể trapbáo hiệu chương trình thiết bị đầu cuối gửi vỏ ( xtermví dụ gửi SIGHUPsau đó chờ vỏ thoát ra) và thực hiện thoát mà không lưu lịch sử khi nó nhận được tín hiệu này. Thêm phần này vào ~/.bashrc:
# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
kill -9cho bất cứ điều gì ngoại trừ những tình huống thảm khốc khi mọi thứ khác đều thất bại.
Tôi ngạc nhiên khi thấy không có ai đề nghị history -cngay trước đó exit. IINM (Tôi không phải là chuyên gia) sẽ làm tốt.
history -rsẽ đọc lại tệp lịch sử, vì vậy việc lưu trở thành không có tác dụng.
Có hai biến môi trường mà bash sử dụng để xác định tệp lịch sử và có bao nhiêu dòng để ghi vào nó khi thoát khỏi trình bao.
Bạn có thể loại bỏ lịch sử phiên của mình bằng một trong hai thứ này (được đặt trong phiên bạn muốn bỏ qua khỏi tệp lịch sử của mình):
HISTFILE=/dev/null
hoặc là
HISTSIZE=0
Một trong số này hoạt động tốt trong Bash trên Fedora
Không chắc chắn tại sao bạn quan tâm đến lịch sử lệnh của bạn rất nhiều. Nếu bạn cần một số lệnh nhất định thường xuyên, bạn có thể vui hơn nếu bạn xác định bí danh cho chúng để bạn có thể lấy lại chúng bằng hai lần nhấn phím thay vì phải tìm chúng trong lịch sử.
Eli đã cho bạn câu trả lời đúng cho Bash sắp đặt HISTSIZE=0.
Tôi chỉ cần thêm phương thức để làm điều đó cho màn hình GNU . Nhấn Ctrl+A(trình tự thoát màn hình) theo sau :scrollback 0. Điều này sẽ xóa lịch sử cuộn lại. Bây giờ bạn có thể làm ngay lập tức :scrollback 15000để thiết lập lại kích thước bộ đệm cuộn lại.
screen(1)?
scrollback=0như vậy.
Ctrl+a Hcũng Ctrl+a :clearsẽ không loại bỏ lịch sử. Bạn cần Ctrl+a :scrollback 0. Bạn có thể tự kiểm tra nó. Bắt đầu một phiên màn hình mới. Bây giờ làm a cat /etc/passwd. Bây giờ, làm bất kỳ điều nào ở trên - Ctrl+a Hhoặc Ctrl+a :clear. Bây giờ, hãy thử sao chép từ bộ đệm màn hình bằng cách Ctrl+a [bấm vào mũi tên theo sau để đi lên và xem bạn có thể đi bao xa để sao chép. Nếu bạn đã thực hiện Ctrl+a :scrollbacktheo sau bởi a clear, bạn sẽ chỉ đi xa như bạn có thể thấy trong cửa sổ hiện tại vì sẽ không có bất kỳ bộ đệm cuộn.
set HISTFILEđăng nhập lần sau? (chỉ cần nói nếu điều này đúng hoặc không chính xác)