GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Mengecualikan Perintah Dari Daftar Sejarah, Tetapi Menyimpannya Dalam Sejarah "langsung"?

Sementara itu saya berhasil menjaga riwayat saya jauh lebih bersih berkat tips hebat dari Anda yang melibatkan HISTIGNORE opsi di .bashrc , menghilangkan semua ll yang tidak berguna itu atau df -k garis.

Namun, saya juga mengetahui bahwa HISTIGNORE opsi ini sangat restriktif , juga.
Misalnya, jika Anda memiliki baris seperti ini (disederhanakan)

HISTIGNORE='ll*:la*:cd*'

Anda tidak hanya akan mengeluarkan ini dari daftar , tetapi juga dari “riwayat langsung” . Anda karena saya ingin menjuluki riwayat volatil yang dapat Anda akses melalui Cursor up /Kursor turun . Cobalah:mereka akan sepenuhnya dihilangkan sekarang, tidak peduli berapa lama Anda menelusuri riwayat perintah Anda dengan tombol kursor tersebut.

Namun, terkadang saya melakukannya membutuhkan garis-garis ini, terutama dengan jalur yang sangat panjang dan rumit yang tidak ingin saya ketik ulang. Di sisi lain, saya ingin baris ini eksklusif ke riwayat hidup saya dan tidak menyimpannya di daftar riwayat karena akan sering berubah.

Apakah ada cara untuk mencapai ini?

Sebagai catatan tambahan, saya telah menemukan bahwa untuk beberapa alasan, riwayat "langsung" dan daftar riwayat terkadang berbeda banyak (lih. Mengapa saya mendapatkan hasil yang berbeda dengan pengguna yang sama dan perintah riwayat).

Jawaban yang Diterima:

Anda dapat menggunakan HISTIGNORE variabel lingkungan.

Daftar pola yang dipisahkan titik dua yang digunakan untuk memutuskan baris perintah mana yang harus disimpan pada daftar riwayat. Misalnya:

export HISTIGNORE="cd*:ls*"

ini akan mengabaikan semua perintah cd dan ls dari riwayat.

EDIT:

maaf, dalam bacaan pertama saya, saya tidak cukup memperhatikan pertanyaan Anda. Btw, Anda benar:HISTIGNORE adalah pengaturan yang sangat sulit, dan bash_history akan mengabaikan setiap perintah yang tercantum dalam variabel ini (itu akan mengabaikannya saat Anda menjalankannya, jika sudah ada entri dengan perintah ini ke HISTFILE Anda mereka akan ditemukan oleh pencarian sejarah terbalik.

Untuk jawaban pertama atas pertanyaan terakhir Anda, riwayat hidup dan tertulis dapat sangat bervariasi jika Anda menggunakan terminal yang berbeda secara bersamaan. Anda dapat mencoba solusi seperti yang dijelaskan di sini:

Pertahankan riwayat bash di beberapa jendela terminal

Apa yang dapat Anda bayangkan adalah solusi di mana Anda menggunakan fungsi di ~/.bash_logout Anda file, yang akan menghapus entri riwayat yang tidak Anda inginkan.

sesuatu seperti ini harus melakukan apa yang Anda inginkan:

 function clear_history(){
    # hist_ignore regex, this may be done in a more fancy way, 
    # such as using an env variable, but anyway
    MYHISTIGNORE='^cd:^view:^cat'

    # write down history to file
    history -w

    # create a new tmp file for history
    tmpFile=$(mktemp)
    cp ${HISTFILE}  ${tmpFile}

    # use it to filter history
    for myRegex in $(echo $MYHISTIGNORE | awk 'BEGIN{FS=":"}{for (i=1;i<=NF;i++){print $i}}'); do 
       sed -i "/${myRegex}/d" ${tmpFile}
    done

    # and copy it back to history file
    mv ${tmpFile} ${HISTFILE}
}

Linux
  1. Cara Menghapus Riwayat Bash di Linux

  2. Cara Mengecualikan File Ukuran Tertentu Dari Menyalin Di Linux

  3. Ny Way Agar Perintah Tidak Ditambahkan ke Riwayat Anda?

  1. Cara menggunakan perintah history di Linux

  2. Cara menonaktifkan pengeditan riwayat saya di bash

  3. Bagaimana saya bisa mengecualikan direktori dari perintah ls

  1. Cara Menghapus Perintah Tertentu Dari Riwayat Bash Di Linux

  2. Bagaimana mengelola riwayat perintah Linux Anda

  3. Cara Membuat Daftar Modul yang Dimuat atau Diaktifkan di PHP dari baris perintah