Tangguhkan sementara bash_history pada shell yang diberikan?

116

Apakah ada cara untuk sementara waktu menangguhkan pelacakan riwayat di bash, sehingga dapat memasuki semacam mode "penyamaran"? Saya memasukkan barang-barang ke terminal saya yang saya tidak ingin mencatat, informasi keuangan yang sensitif.

Naftuli Kay
sumber

Jawaban:

153

Ini seharusnya yang Anda cari:

unset HISTFILE

Dari man bash

Jika HISTFILE tidak disetel, atau jika file histori tidak dapat ditulis, histori tidak disimpan.

Atau, jika Anda ingin mematikannya dan menghidupkannya lagi, mungkin lebih mudah untuk digunakan set:

Matikan

set +o history

Nyalakan

set -o history
SiegeX
sumber
12
Nilai HISTFILEhanya diperiksa ketika bash keluar, jadi metode pertama tidak berfungsi sebagaimana mestinya (jika Anda mengembalikan nilai, perintah akan disimpan). set +o historytidak bekerja sesuai petunjuk.
Gilles
6
Terima kasih, sangat baik. Saya akan menggunakan set +o historydan set -o historyuntuk beralih bolak-balik ketika saya sedang melakukan hal-hal rahasia;)
Naftuli Kay
1
unset HISTFILEtidak bekerja. set -/+o historybekerja seperti pesona! terima kasih
kholofelo Maloma
4
Sebagai tip jika Anda meletakkan spasi di depan perintah (mulai perintah dengan spasi) itu tidak akan dicatat dalam riwayat Anda, dan tombol panah atas / bawah tidak akan menunjukkannya juga.
Mahdi
1
Ini tidak akan berfungsi di zsh btw
Shubham Chaudhary
33

Menggunakan bash, atur HISTCONTROL="ignorespace"dan awali dengan spasi perintah apa pun yang Anda tidak ingin direkam dalam sejarah. Jika Anda lupa mengambil tindakan apa pun, ada juga history -d <number>untuk menghapus entri tertentu atau history -cuntuk menghapus seluruh riwayat perintah.

forcefsck
sumber
27

Pastikan itu HISTCONTROLberisi ignorespace. Anda mungkin ingin menambahkan HISTCONTROL=ignorespace( HISTCONTROL=ignoredups:ignorespaceatau sesuatu) ke blog Anda ~/.bashrc. Kemudian setiap baris perintah yang dimulai dengan spasi dihilangkan dari sejarah.

Kemungkinan lain adalah memulai sesi bash baru yang tidak menyimpan riwayatnya.

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell
Gilles
sumber
5

Jika Anda perlu menghindari menyimpan beberapa perintah dan Anda masih ingin menggunakan panah untuk mengakses perintah sebelumnya, gunakan:

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

Ada empat cara (level) untuk mengontrol bagaimana perintah disimpan.

  1. Yang pertama dan paling sederhana adalah menggunakan ignorespace(atau ignoreboth):

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

    Itu akan memungkinkan untuk menggunakan spasi sebelum perintah yang Anda ingin hindari direkam dalam daftar memori history. Dan, akibatnya, karena tidak ada perintah yang direkam dalam memori yang dapat dikirim ke file, juga akan menghindari satu perintah untuk dikirim ke file yang terdaftar di $HISFILE.

  2. Hindari merekam perintah ke file di $HISTFILE:

    $ unset HISTFILE

    Jika tidak disetel, riwayat perintah tidak disimpan saat shell keluar.

    Null HISTFILE=''dan / atau diatur untuk HISTFILE=/dev/nullbekerja dengan efek yang sama. Memahami bahwa perintah masih direkam ke daftar memori, coba historyperintah, atau panah atas.

    Peringatan: jika HISTFILE diatur ulang sebelum shell ada, semua yang telah direkam dalam memori tetap dapat ditulis ke file.

  3. Hindari merekam perintah baru ke daftar riwayat di memori. Dan, karena tidak ada dalam memori, tidak dapat direkam ke file.

    $ shopt -ou history              # or set +o history

    Aktifkan kembali dengan shopt -os history(atau set -o history)

  4. Hapus semua perintah dari daftar sejarah di memori:

    $ HISTSIZE=0

    Semua perintah terhapus (dari memori) dan karena itu tidak ada yang dapat disimpan ke file, tentu saja, sampai variabel diatur kembali ke beberapa nilai numerik yang valid.

Ishak
sumber
//, Ini mencakup semua jawaban kecuali jawaban dari @Ambrose dalam satu halaman yang mudah. Cara untuk pergi, @Isaac. Apakah Anda bersedia menambahkan satu atau dua tautan ke dokumen untuk ini? Cukup yakin man historytidak akan memotongnya untuk sebagian besar dari kita.
Nathan Basanese
1
@NathanBasanese Diperluas. Lebih baik?
Isaac
// , Iya! Apakah saya akan benar dengan menganggap bahwa ini berasal dari Bash Variables dan Shopt Built-in docs ?
Nathan Basanese
//, Juga, ketika saya membaca dokumentasi Bash Variables , saya menemukan HISTIGNORE, yang subsumesfungsinya HISTCONTROL.
Nathan Basanese
(Dengan asumsi Anda menggunakan linux): Apa yang terjadi jika Anda menjalankan perintah LESS=+'/^ *HISTI' man bash(bukankah itu "halaman manual"?). @NathanBasanese
Isaac
3

Ada satu cara sederhana untuk mematikan histori, jadi perintah tidak akan disimpan dalam .bash_historyfile.

Anda harus meletakkan spasi putih atau ruang tab di depan perintah apa pun, sehingga perintah itu tidak akan disimpan dalam riwayat. Sebagai contoh:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

The pwdperintah tidak akan mendapatkan toko dalam sejarah, karena memiliki spasi di depan.

Kalanidhi M.
sumber
Ini tidak bekerja; Bash mengeluh bahwa '-' atau '-history', atau perintah ditulis dgn tanda penghubung lainnya tidak dapat ditemukan.
Samuel A. Falvo II
2
Ini tidak akan berfungsi kecuali HISTCONTROL = "ignorespace" disetel sebagai respons forcefsck
DeveloperChris
1
export HISTFILE=/dev/null 

Itu cara saya. Kalau-kalau HISTORY / HISTFILE / HISTCONTROL yang tidak disetel, dll ... tidak berfungsi, mengekspornya ke / dev / null selalu berhasil untuk saya.

Ambrosius
sumber
Untuk menunda sementara sejarah? Ini tidak berfungsi untuk saya sebagai perintah biasa. Perintah selanjutnya dicatat ke riwayat. Apakah Anda memanggil ini dalam .bash_profile atau skrip? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Mat Gessel