Đã 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 HISTFILE
biế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 $HISTFILE
khi 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 HISTIGNORE
biế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 ~/.bashrc
thì bất kỳ trường hợp nào ls
và cd
khô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 ignoreboth
cũ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ể trap
báo hiệu chương trình thiết bị đầu cuối gửi vỏ ( xterm
ví dụ gửi SIGHUP
sau đó 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 -9
cho 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 -c
ngay trước đó exit
. IINM (Tôi không phải là chuyên gia) sẽ làm tốt.
history -r
sẽ đọ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=0
như vậy.
Ctrl+a H
cũng Ctrl+a :clear
sẽ 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 H
hoặ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 :scrollback
theo 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)