Nhận lịch sử bash để chỉ nhớ các lệnh chạy với không gian có tiền tố!


10

Các lệnh được thực thi trong thiết bị đầu cuối có tiền tố trống (s) không được ghi lại trong tệp lịch sử lệnh. Nhưng có cách nào để có được điều ngược lại, tức là lịch sử chỉ nên ghi lại những thứ có tiền tố không gian?

Câu trả lời:


12

Bạn có thể đảo ngược các cài đặt Ubuntu mặc định bằng cách đặt hai biến (HISTIGNORE một HISTCONTROL), sử dụng các lệnh như dưới đây:

HISTIGNORE='!( *)'
HISTCONTROL=ignoredups

HISTCONTROL=ignoredupsthay đổi hành vi lịch sử để chỉ bỏ qua các dòng trùng lặp và không bỏ qua các dòng bắt đầu bằng một khoảng trắng. (Bạn cũng có thể đặt HISTCONTROL thành chuỗi trống (với HISTCONTROL=) nếu bạn muốn giữ các bản sao, nhưng điều đó thường không muốn.)

HISTIGNORE='!( *)'làm cho lịch sử bỏ qua mọi dòng không bắt đầu bằng khoảng trắng: ( *)sẽ khớp với mọi dòng bắt đầu bằng khoảng trắng, nhưng hàng đầu !phủ định kết quả khớp, vì vậy nó khớp với mọi thứ không bắt đầu bằng khoảng trắng. Và mọi thứ phù hợp với mẫu HISTIGNORE sẽ bị lịch sử bỏ qua. (Tùy chọn thứ hai này yêu cầu bash được chạy khi extglobbật shopt -s extglob, nhưng đó là cài đặt mặc định trên Ubuntu.)

Nếu bạn muốn làm điều này vĩnh viễn, đừng quên đặt hai lệnh trên vào ~/.bashrc.


cảm ơn, đó chính xác là những gì tôi muốn .. đã lưu các thay đổi vào .bashrc.. Tôi cần điều đó để ngăn bash ghi lại mọi lệnh cd, lss và các lệnh hàng ngày khác mà tôi sử dụng; và đối với một vài lệnh mà tôi cần trong lịch sử, giờ đây tôi có thể sử dụng tiền tố ..
chính xác là

1
@rusty Nếu bạn chỉ muốn loại trừ một số lệnh tầm thường, có thể tốt hơn cho bạn nếu bạn sử dụng một cái gì đó như HISTIGNORE='ls*:cd*', điều đó sẽ làm cho lịch sử bỏ qua mọi dòng bắt đầu bằng lshoặc cd, bạn có thể mở rộng danh sách đó bằng các lệnh khác, chỉ cần đặt một :giữa các lệnh . Nhưng đừng quên rằng tính năng gọi lại lệnh mà bạn có thể truy cập bằng "phím mũi tên lên" cũng sử dụng lịch sử này, vì vậy nếu bạn đặt thứ gì đó bị bỏ qua, bạn sẽ không thể nhớ lại các lệnh bị bỏ qua đó bằng " mũi tên lên".
chim ưng

Tôi muốn bỏ qua bất kỳ lệnh SSH, nhưng không phải các lệnh như ssh-copy-idhoặc ssh-keygen. Trong HISTIGNORE, tôi đã bao gồm " ssh\ *" với các lệnh bị bỏ qua khác của tôi. Thoát khỏi không gian char dường như là bắt buộc.
dùng38537

2

" Các lệnh được thực thi trong thiết bị đầu cuối có tiền tố trống (s) không được ghi lại trong tệp lịch sử lệnh "

Vâng, đúng vậy.

lịch sử thiết bị đầu cuối


1
đó là một thiết lập trong bash ;-)
Rinzwind

lệnh có tiền tố với khoảng trắng. Giống như `sudo apt-get update`
Avinash Raj

Giá trị của biến HISTCONTROL của bạn là gì?
glenn jackman

@AvinashRaj: yeah, hãy xem tôi ra lệnh "điều này không được ghi lại", tôi đặt một khoảng trắng (hiển thị cả trong dòng lệnh và lịch sử). Vì vậy, nó không hoạt động theo cách đó. Có lẽ bạn có thể định cấu hình nó (với HISTCONTROL); nhưng nó không phải là trường hợp theo mặc định.
MrVaykadji
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.