Loại trừ một số lệnh được lưu trữ trong lịch sử bash


31

Có cách nào để loại trừ các lệnh như rm -rf, svn revertkhỏi bị lưu trữ trong lịch sử bash không? Thật ra, tôi đã nhầm lẫn, đã cấp cho họ một số lần mặc dù tôi không có ý định làm, chỉ vì tôi đang làm mọi việc nhanh chóng và nó đã xảy ra. Do đó dẫn đến mất rất nhiều công việc tôi đã làm cho đến nay.


3
Bạn có thể quan tâm đến serverfault.com/questions/48769/ Khăn
Luc M

Câu trả lời:


53

Bạn có thể muốn $HISTIGNORE: "Danh sách các mẫu được phân tách bằng dấu hai chấm được sử dụng để quyết định dòng lệnh nào sẽ được lưu trong danh sách lịch sử." Dòng này trong ~ / .bashrc của bạn sẽ thực hiện công việc:

HISTIGNORE='rm *:svn revert*'

Ngoài ra, bạn có thể thêm một khoảng trắng ở đầu lệnh để loại trừ nó khỏi lịch sử. Điều này hoạt động miễn là $HISTCONTROLcó chứa ignorespacehoặc ignoreboth, mặc định trên bất kỳ bản phân phối nào tôi đã sử dụng.


4
không gian là cách tôi luôn luôn làm nó.
Cướp

Tôi đã từng vô tình nhập thêm y, sau khi tất cả cp(bí danh để cp -i) vượt qua. Vì vậy, tôi đặt bí danh yalias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'... Nhưng HISTIGNORElà phương pháp tốt hơn như nó có vẻ. :) Cảm ơn.
anishsane

2
Nói rõ hơn: bạn có thể thêm export HISTCONTROL="ignorespace"vào ~/.bashrcđể bỏ qua các lệnh bắt đầu bằng dấu cách.
Aidan Feldman

@AidanFeldman không mặc định trên macOS
akauppi

LƯU Ý: không gian nên được bao gồm khi chúng ta gõ vào dòng lệnh và không phải trong HISTIGNORE.
Gayan Weerakutti

6

Mặc dù hơi khác so với câu hỏi của OP, nhưng khi tôi cố tình không muốn một lệnh được lưu trữ trong lịch sử bash, tôi đặt tiền tố cho chúng bằng một khoảng trắng. Hoạt động trong Ubuntu và các biến thể của nó, không chắc nó có hoạt động trên tất cả các hệ thống không.


6
Phụ thuộc vào $HISTCONTROL(xem câu trả lời của tôi).
l0b0

@ l0b0 đúng, cảm ơn đã chỉ ra.
k4rtik

1

Tôi thường giết cá thể bash của mình khi tôi đã làm những điều mà tôi không muốn trong lịch sử.

kill -9 $$

$$ đại diện cho quy trình hiện tại - bash khi bạn chạy nó từ trình bao. Bạn có thể sử dụng $ BASHPID, nhưng gõ nhiều hơn :-)


2
Một số cài đặt Bash (như thế này ) sẽ lưu lịch sử sau mỗi lệnh và trong trường hợp đó, điều này sẽ không hoạt động.
l0b0

1
Tôi đã từng làm điều này. nhưng thiết lập HISTFILE=/dev/nulllà một lựa chọn tốt hơn.
anishsane

chỉ đơn giản là HISTFILE=làm việc trong cả bash và ksh.
kubanchot

hoặcunset HISTFILE
Todd Walton
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.