Bagaimana cara menutup terminal tanpa menyimpan histori?


33

Lebih dari sekali saya secara tidak sengaja menjalankan sejumlah perintah dan mencemari riwayat bash saya. Bagaimana cara menutup terminal saya tanpa menyimpan riwayat bash saya? Saya menggunakan Fedora.

Jawaban:


25

Riwayat shell Anda disimpan dalam file yang ditunjukkan oleh HISTFILEvariabel. Begitu:

unset HISTFILE

Ini juga berlaku untuk zsh, tetapi tidak untuk ksh yang terus menyimpan ke file yang ditunjukkan oleh $HISTFILEsaat shell dimulai (dan sebaliknya, Anda memutuskan untuk menyimpan histori Anda di ksh setelah Anda memulai shell).


Saya dapat menggunakan ini sebelum saya logout setelah saya mencemari sejarah? dan apa gunanya untuk sesi ini? saya tidak perlu set HISTFILElain kali saya masuk? (katakan saja apakah ini benar atau salah)

@ acidzombie24 Itu benar, perubahan variabel lingkungan tidak disimpan di seluruh sesi kecuali Anda menyimpan perubahan secara eksplisit, misalnya dalam file rc.
jw013

31

Jawaban singkat:

Ketik ini saat diminta:

$ kill -9 $$

Ini akan membunuh cangkang Anda segera tanpa cangkang mampu melakukan apa pun seperti menjebak sinyal, menyimpan sejarah, mengeksekusi ~/.bash_logout, memperingatkan tentang pekerjaan yang berhenti, atau hal-hal baik lainnya.

Jawaban panjang:

Catatan: Opsi ini tidak saling eksklusif; mereka semua bisa digunakan sekaligus.

Pilihan 1:

Jika Anda seorang perfeksionis ketika datang untuk mengacaukan file riwayat Anda, maka yang dapat Anda lakukan adalah memodifikasi HISTIGNOREvariabel untuk memasukkan sekumpulan perintah yang tidak ingin direkam. Misalnya, jika Anda menambahkan HISTIGNORE='ls*:cd*'ke Anda ~/.bashrcmaka setiap contoh lsdan cdtidak dimasukkan ke file riwayat Anda.

Pilihan 2:

Jika Anda ingin mengontrol berdasarkan perintah-demi-perintah perintah apa yang tersisa dari riwayat Anda, Anda dapat mengatur HISTCONTROL='ignorespace'yang akan menghilangkan baris perintah yang dimulai dengan spasi. Menggunakan ignorebothjuga akan menghilangkan garis yang berulang. Kemudian, menekan spasi sebelum Anda memasukkan perintah akan menyebabkannya tidak muncul di file riwayat Anda.

Opsi 3:

Jika Anda hanya ingin membuatnya ketika Anda menutup terminal, shell segera keluar, Anda dapat trapmemberi sinyal program terminal mengirimkan shell ( xterm, misalnya mengirim SIGHUPlalu menunggu shell untuk keluar) dan membuat keluar tanpa menyimpan sejarah ketika menerima sinyal ini. Tambahkan ini ke Anda ~/.bashrc:

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP

2
+1 untuk metode 'kill -9 $$'. Itu tentu saja satu jalan keluar situasi di mana HISTIGNORE, dll ditetapkan sebagai hanya-baca.
Corey Henderson

7
Saya tidak berpikir itu ide yang baik untuk mempromosikan menggunakan kill -9untuk apa pun kecuali situasi yang mengerikan ketika semuanya gagal.
Christoffer Hammarström

1
Mengirim SIGKILL tidak pernah merupakan ide yang baik sebagai prosedur operasi standar. Gunakan prosedur yang tepat, seperti tidak menyetel HISTFILE.
Arcege

@Arcege TMTOWTDI.
amfetamachine

Saya ingin tahu yang sebaliknya - sayangnya cara membunuh bash memastikan itu AKAN menyelamatkan sejarahnya - dan ini menjawab pertanyaan saya, terima kasih.
mveroone

3

Saya terkejut melihat tidak ada yang menyarankan history -csegera sebelum exit. IINM (saya bukan ahli) yang akan melakukannya dengan baik.


2
Anda berada di jalur yang benar: history -rakan membaca kembali file riwayat, jadi menabung menjadi larangan.
Simon Richter

Membilas sejarah adalah kebiasaan buruk ... sejarah shell berisi banyak informasi berguna tentang siapa yang melakukan apa. ini sangat berguna untuk orang-orang yang baru di platform Anda (kecuali jika Anda 100% yakin tentang dokumentasi Anda, manajemen perubahan)
Franklin Piat

2

Ada dua variabel lingkungan yang digunakan bash untuk menentukan file histori dan berapa banyak baris untuk ditulis ketika shell keluar.

Anda dapat membuang riwayat sesi Anda dengan salah satu dari ini (ditetapkan selama sesi yang ingin Anda hilangkan dari file riwayat Anda):

HISTFILE=/dev/null

atau

HISTSIZE=0

Salah satu dari ini bekerja dengan baik di Bash on Fedora


1

Tidak yakin mengapa Anda begitu peduli tentang sejarah perintah Anda. Jika Anda sering membutuhkan perintah tertentu, Anda mungkin akan lebih asyik jika Anda menentukan alias untuknya sehingga Anda bisa mendapatkannya kembali dengan dua kali menekan daripada harus mencarinya dalam sejarah.


0
  1. Eli sudah memberi Anda jawaban yang benar untuk Bash yang akan ditetapkan HISTSIZE=0.

  2. Saya hanya akan menambahkan metode untuk melakukannya untuk layar GNU . Tekan Ctrl+A(urutan pelarian layar) diikuti oleh :scrollback 0. Ini akan menghapus riwayat scroll-back. Sekarang Anda dapat segera lakukan :scrollback 15000untuk mengatur ulang ukuran buffer scroll-back.


Kapan OP mengatakan mereka menggunakan screen(1)?
amfetamachine

Dia tidak melakukannya. Tapi, Anda bisa menjalankan Bash di dalam sesi layar dan HISTSIZE = 0 akan tetap meninggalkan detail aktivitas Anda di buffer scroll-back layar. Jadi, jika Anda benar-benar menginginkannya bersih, Anda harus melakukannya scrollback=0juga.
gsbabil

Buffer gulir kembali dihapus ketika jendela ditutup (yaitu ketika shell keluar). Bagaimana kalau Anda mengetik Ctrl-a H? Apakah ini akan membunuh file log?
amfetamachine

@amphetamachine: tidak, ini hanya akan memulai / mengakhiri pencatatan jendela saat ini. Neighther Ctrl+a Hjuga tidak Ctrl+a :clearakan menghapus riwayat. Kamu butuh Ctrl+a :scrollback 0. Anda bisa mengujinya sendiri. Mulai sesi layar baru. Sekarang lakukan a cat /etc/passwd. Sekarang, lakukan salah satu di atas - Ctrl+a Hatau Ctrl+a :clear. Sekarang, coba salin dari buffer layar dengan tanda panah yang Ctrl+a [diikuti untuk naik dan lihat seberapa jauh Anda bisa menyalin. Jika Anda telah melakukan Ctrl+a :scrollbackdiikuti oleh clear, Anda hanya akan pergi sejauh yang Anda lihat di jendela saat ini karena tidak akan ada buffer scrollback.
gsbabil
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.