GNU/Linux >> Belajar Linux >  >> Ubuntu

Mengapa Script Ini Untuk Menghapus Bagian Dari Riwayat Perintah Bekerja Di Komputer?

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.

Terkait:Dual boot dengan UEFI dan LUKS – Apa yang perlu saya ketahui/lakukan?

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 .


Ubuntu
  1. Ubuntu – Mengapa Perintah Xmodmap Tidak Dapat Berjalan Saat Startup/login?

  2. Memahami Tanda Seru (!) Di Bash?

  3. Mengapa Perintah Berikut Membunuh Sistem?

  1. Cara menggunakan perintah history di Linux

  2. Perintah Sejarah Menampilkan Direktori Dan Tanggal?

  3. Mengapa Skrip Ini Berjalan Su Sepertinya Tidak Pernah Berhenti Jika Saya Mengubah Pengguna Di Dalam Skrip?

  1. Lihat dan Hapus Riwayat Terminal di Ubuntu 20.04 - Metode Terbaik?

  2. Mengapa Firefox 8.0 Tidak Tersedia Sebagai Pembaruan Di Manajer Pembaruan?

  3. Sejarah Perintah Tampaknya Hilang 75 Baris Pertama?