Để không lưu một lệnh duy nhất trong lịch sử của bạn, chỉ cần đặt trước nó bằng một khoảng trắng (được đánh dấu ␣
ở đây):
$ echo test
test
$ history | tail -n2
3431 echo test
3432 history | tail -n2
$ ␣echo test2
test2
$ history | tail -n2
3431 echo test
3432 history | tail -n2
Hành vi này được đặt trong ~/.bashrc
tệp của bạn , cụ thể là trong dòng này:
HISTCONTROL=ignoreboth
man bash
nói:
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 được lưu trong danh sách lịch sử. Nếu danh sách các giá trị bao gồm
ignorespace , dòng bắt đầu bằng một nhân vật không gian sẽ không được lưu trong danh sách lịch sử . Giá trị bỏ qua khiến các dòng khớp với mục lịch sử trước đó không được lưu. Một giá trị của
ignoreboth là viết tắt cho ignorespace và ignoredups .
ignoredups
nhân tiện là lý do tại sao history | tail -n2
chỉ xuất hiện một lần trong lịch sử trong bài kiểm tra trên.
Lịch sử của thiết bị đầu cuối được lưu trong RAM và chuyển sang ~/.bash_history
ngay khi bạn đóng thiết bị đầu cuối. Nếu bạn muốn xóa một mục cụ thể khỏi bạn, ~/.bash_history
bạn có thể làm như vậy với sed
:
# print every line…
sed '/^exit$/!d' .bash_history # … which is just “exit”
sed '/^history/!d' .bash_history # … beginning with “history”
sed '/>>log$/!d' .bash_history # … ending with “>>log”
sed '\_/path/_!d' .bash_history # … containing “/path/” anywhere
Trong phần trước tôi đã thay đổi dấu phân cách mặc định /
thành _
sử dụng bên trong cụm từ tìm kiếm, trên thực tế, điều này tương đương với sed -i '/\/path\//d' .bash_history
. Nếu kết quả đầu ra lệnh chỉ có dòng bạn muốn xóa thêm -i
lựa chọn và thay đổi !d
để d
thực hiện việc xóa:
# delete every line…
sed -i '/^exit$/d' .bash_history # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history # … ending with “>>log”
sed -i '\_/path/_d' .bash_history # … containing “/path/” anywhere