Script dapat ditemukan di sini:https://stackoverflow.com/questions/14750650/how-to-delete-history-of-last-10-commands-in-shell
Untuk kenyamanan ini dia:
for x in `seq $1 $2`
do
history -d $1
done
Saya meletakkan ini di direktori include saya (yang telah saya tambahkan ke PATH) tempat saya menjalankan banyak skrip lain yang telah saya tulis dan berfungsi dengan baik.
Ini tidak menghasilkan hasil yang diinginkan untuk menghapus baris dari riwayat saya, bahkan tidak menghasilkan apa-apa.
Adakah yang tahu mengapa perintah history tidak berfungsi? Saya ingin tahu apakah ini ada hubungannya dengan direktori.
Info Tambahan:
Saya bermain-main dengan kode dan mencoba variasi yang berbeda. Jika saya menempatkan echo
di depan history
perintah dan jalankan, saya mendapatkan output berikut:
[email protected]:~$ idelhistory 300 305
history -d 300
history -d 301
history -d 302
history -d 303
history -d 304
history -d 305
[email protected]:~$
Jadi, bagi saya, sepertinya itu harus bekerja dengan sempurna. Saya tidak tahu mengapa. Skrip ini dijalankan dari /$HOME/Scripts/ dan telah disertakan dalam PATH. Saya juga mencoba menjalankannya dengan sudo dan tidak ada perubahan.
Jawaban yang Diterima:
Dalam satu kalimat:tidak berfungsi karena Anda tidak memanggilnya dengan benar.
Pertama, karena skrip Anda tidak dimulai dengan #!/bin/bash
, itu sebenarnya bukan skrip bash. Shell mana yang dieksekusi tergantung pada bagaimana Anda memanggilnya. Saat Anda menjalankannya dari baris perintah bash, bash mem-fork instance baru dari dirinya sendiri (ini harus terjadi untuk mengeksekusi perintah eksternal apa pun), dan instance baru inilah yang mengeksekusi skrip. Jadi skrip dieksekusi dengan pengaturan yang sama (termasuk riwayat sejauh ini) seperti shell induk. Itu dieksekusi dengan opsi yang berbeda; khususnya, pelacakan riwayat tidak aktif untuk perintah dalam skrip (yang cocok untuk Anda, karena jika tidak, itu akan menambah riwayat yang ingin Anda ubah).
Apakah instance bash yang mengeksekusi skrip memiliki HISTFILE
set variabel tergantung pada apakah itu diekspor di induknya (yang agak aneh). Jika tidak diekspor dan disetel di turunan, skrip turunan tidak akan menyimpan riwayat yang dimodifikasi saat berakhir.
Jika HISTFILE
diekspor, maka skrip anak akan memodifikasi file riwayat Anda. Namun, kecuali Anda telah mengonfigurasi shell interaktif Anda untuk memuat ulang riwayat setelah setiap perintah, riwayat yang dimodifikasi hanya akan diambil oleh instance bash yang baru dimulai.
Jika Anda ingin menjalankan cuplikan shell yang memengaruhi instance shell saat ini, Anda harus menjalankan shell tersebut di instance shell saat ini, alih-alih menjalankannya sebagai subproses . Anda akan mengalami masalah serupa jika ingin melakukan hal lain yang memengaruhi proses shell itu sendiri, seperti mengubah direktori, menyetel variabel, dll. Gunakan .
(“titik”) atau source
bawaan untuk menjalankan skrip dalam proses shell saat ini.
. idelhistory 300 365
Atau, Anda dapat mendefinisikan ini sebagai fungsi di .bashrc
. Anda .