Để ngăn việc ghi nhật ký các lệnh "nguy hiểm" trong lịch sử bash, tôi đã thêm dòng sau vào .bashrc
tệp của mình :
HISTIGNORE='rm *:mv *:cp *:cat*>*:pv*>*'
Điều này hoạt động tốt, nhưng nó có tác dụng phụ: Tôi không thể thấy lịch sử đầy đủ của các lệnh được thực thi trên máy. Giả sử tôi có một số máy để thử nghiệm và tôi muốn có thể thấy tất cả các lệnh được thực thi. Tôi sẽ sử dụng bash Internal history
để hiển thị các lệnh đã thực hiện và có lẽ grep cho ngày hôm nay:
history | grep Sep-28
Những gì tôi muốn có là ghi nhật ký các lệnh "nguy hiểm", nhưng đặt một dòng #
ở đầu dòng, để nếu tôi tình cờ thực hiện lệnh từ lịch sử do nhầm lẫn, sẽ không có thiệt hại nào được thực hiện.
Tôi không có ý tưởng nếu điều này là có thể.
Cập nhật và làm rõ:
Lý do chính tại sao đây là một vấn đề đối với tôi là vì tôi thường được kết nối với máy của mình từ một số thiết bị đầu cuối và bất kỳ lệnh nào được thực hiện trên một thiết bị đầu cuối sẽ ngay lập tức được đọc vào lịch sử của các thiết bị đầu cuối khác. Điều này đạt được bởi
PROMPT_COMMAND="history -a; history -c; history -r"
Hãy tưởng tượng tôi có hai thiết bị đầu cuối mở. Trong một tôi có một số cat /dev/foo > file.out
quá trình chạy. Trong lần thứ hai, tôi kiểm tra tiến độ với ls -lAhF
. Tôi tiếp tục lặp lại ls
bằng cách nhấn Upvà ENTER(đó là lệnh cuối cùng từ lịch sử). Ngay khi lệnh đầu tiên kết thúc, lệnh cuối cùng trong lịch sử không còn nữa ls
, nhưng cat /dev/foo > file.out
. Nếu tôi không cẩn thận, tôi sẽ bắt đầu lại mèo và ghi đè lên file.out.
Những gì tôi muốn đạt được là lệnh mèo sẽ được đi trước với một #
, để nó sẽ không được thực thi. Tuy nhiên, tôi vẫn sẽ thấy nó trong lịch sử và có thể sử dụng lại nó (nếu đó là một lệnh dài) bằng cách không bình luận nó.
watch ls -lAhF
hoặcwhile sleep 1; do ls -lAhf; done
; thay vì xem kích thước tệp, bạn có thể sử dụngpv /dev/foo > file.out
( ivarch.com/programs/pv.shtml ).