Câu trả lời:
Nếu bạn muốn chạy một lệnh mà không lưu nó trong lịch sử, hãy thêm nó vào một khoảng trống thừa
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
Để làm việc này, bạn cần ignorespace
hoặc ignoreboth
trong HISTCONTROL
. Ví dụ: chạy
HISTCONTROL=ignorespace
Để làm cho thiết lập này liên tục, đặt nó trong của bạn .bashrc
.
Nếu bạn đã chạy lệnh và muốn xóa nó khỏi lịch sử, trước tiên hãy sử dụng
history
để hiển thị danh sách các lệnh trong lịch sử của bạn. Tìm số bên cạnh số bạn muốn xóa (ví dụ: 1234) và chạy
history -d 1234
Ngoài ra, nếu dòng bạn muốn xóa đã được ghi vào $ HISTFILE của bạn (điều này thường xảy ra khi bạn kết thúc một phiên theo mặc định), bạn sẽ cần phải viết lại cho $ HISTFILE, hoặc dòng sẽ xuất hiện lại khi bạn mở mới phiên:
history -w
history -a
, trong trường hợp đó, nó đã được ghi vào tệp lịch sử, thay vì thoát theo cấu hình bình thường. Cụ thể: mywiki.wooledge.org/BashFAQ/088
history -w
. Nếu không, khi bạn thoát, dòng đã xóa vẫn còn đó!
history -w
sau history -d {num}
đó chính xác là những gì tôi cần - cần thêm câu trả lời quan trọng vào câu trả lời, nếu không, người dùng có thể nghĩ rằng việc xóa tạm thời khỏi trình bao hiện tại là thực sự vĩnh viễn.
history -w
là cần thiết cho các mục đã được ghi vào .bash_history
tệp. Cách sao chép (ví dụ: trên CentOS 7 với cấu hình chứng khoán): 1. đăng nhập 2. nhập lệnh echo foo
3. đăng xuất 4. đăng nhập lại 5. xóa mục nhập cho echo foo
6. đăng xuất 7. đăng nhập lại: mục vẫn còn đó. Tùy thuộc vào cách bạn định cấu hình lịch sử bash của mình, có lẽ bạn có thể tái tạo vấn đề này theo những cách khác - tức là nếu bạn kích thích viết lịch sử trước khi đăng xuất.
Để xóa tất cả lịch sử của bạn, sử dụng
history -c
Để xóa một dòng, sử dụng
history -d linenumber
Tôi có cái này trong ~/.bashrc
đó, làm cho lệnh $ forget
xóa lệnh trước đó khỏi lịch sử
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);
}
history -d $( history | tail -n 1 | cut -f 1 -d " " )
đơn giản hơn?
history | tail -n1
là history
chính lệnh, vì vậy xóa số đó nhận được mục sai. Tuy nhiên, history -d $( history | awk 'END{print $1-1}' )
kết hợp chọn dòng, chọn trường và trừ.
Nếu bạn muốn quên toàn bộ phiên bash, bạn có thể kill
xử lý bash hiện tại. Vì biến $$
giữ pid
vỏ hiện tại, bạn có thể làm:
kill -9 $$
Bạn cần viết những thay đổi sau khi bạn xóa lịch sử. Và nếu bạn không muốn có lệnh xóa lịch sử trong lịch sử của mình thì bạn cần chạy lệnh như thế:
history -c && history -w && logout
Chúc may mắn.
Adding another point suppose if you want to delete a range of history lines
You can use below script.
Below example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done