it-swarm-id.com

Tangguhkan bash_history sementara di shell yang diberikan?

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

128
Naftuli Kay

Ini seharusnya yang Anda cari:

unset HISTFILE

Dari man bash

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

Sebagai alternatif, jika Anda ingin mematikannya dan menyalakannya lagi, mungkin lebih mudah digunakan set :

Matikan

set +o history

Nyalakan

set -o history
173
SiegeX

Menggunakan bash, atur HISTCONTROL="ignorespace" dan mendahului 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 -c untuk menghapus seluruh riwayat perintah.

33
forcefsck

Pastikan bahwa HISTCONTROL berisi ignorespace. Anda mungkin ingin menambahkan HISTCONTROL=ignorespace (Atau HISTCONTROL=ignoredups:ignorespace Atau sesuatu) ke ~/.bashrc Anda. 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

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, sebagai konsekuensinya, karena tidak ada perintah yang direkam dalam memori yang dapat dikirim ke file, juga akan menghindari sat perintah yang akan dikirim ke file yang tercantum dalam $HISFILE.

  2. Hindari merekam perintah ke file dalam $HISTFILE:

    $ unset HISTFILE
    

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

    Tidak ada HISTFILE='' dan/atau set ke HISTFILE=/dev/null berfungsi dengan efek yang sama. Pahami bahwa perintah masih direkam ke daftar memori, coba perintah history, atau panah ke atas.

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

  3. Hindari merekam bar perintah 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.

6
Isaac

Ada satu cara sederhana untuk mematikan histori, jadi perintah tidak akan disimpan di .bash_history file.

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

Perintah pwd tidak akan disimpan di riwayat, karena memiliki spasi putih di depan.

3
Kalanidhi M.
export HISTFILE=/dev/null 

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

2
Ambrose

Untuk mengambil jawaban SiegeX sedikit lebih jauh dan benar-benar membuatnya menjadi mode penyamaran ...

Penafian: judul mungkin akan bekerja pada terminal gnome. itu hanya diuji di Linux Mint 19.3/Gnome Terminal 3.28.1 karena saya malas.

Tambahkan berikut ini ke ~/.bash_functions Anda (ini mengasumsikan Anda mengimpornya melalui .bashrc/.profile Dll):

function setGnomeTerminalTitle() {
    local NEW_TITLE="$1";
    PS1="\[\e]0;${NEW_TITLE}\a\]\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\]";
}

Kemudian tambahkan berikut ini ke ~/.bash_aliases Anda (sekali lagi ini mengasumsikan Anda mengimpornya melalui .bashrc/.profile Dll):

alias title="setGnomeTerminalTitle";
alias hist='history'
alias histoff="setGnomeTerminalTitle 'Incognito Window' && set +o history"
alias histon="setGnomeTerminalTitle \"[email protected]$HOSTNAME:\${PWD//\${HOME//\\//\\\\\\/}/\\~}\" && set -o history"

EDIT: untuk menjelaskan hal-hal judul histon - biasanya judul jendela di gnome-terminal adalah "$ USER @ $ HOSTNAME: $ {PWD}" kecuali bahwa jika Anda berada di folder rumah Anda,/home/foo, itu akan ditampilkan sebagai ~; setidaknya itu ada di komputer saya. perintah ini menggunakan substitusi string bash untuk menghindari garis miring di $HOME jadi kita mendapatkan \/home\/foo dan kemudian menggunakannya sebagai regex untuk mengganti pola itu di $PWD dengan literal ~ ... dan kemudian sekelompok lolos ditambahkan di atasnya untuk membuatnya berfungsi sebagai alias dalam string yang dikutip ganda.

Sekarang ketika Anda mengetik histoff Anda mendapatkan perubahan judul untuk mode penyamaran dan riwayat Anda dihentikan untuk sesi itu di jendela itu (Word histoff masih login tetapi tidak ada hasilnya). Jika Anda kemudian mengetik histon ia akan mengembalikan judul dan semua baris setelah histoff hingga dan termasuk baris dengan histon tidak dicatat tetapi semuanya setelah histon dicatat.

Contoh:

## this is still logged
histoff  

## this is NOT logged
echo "my password is: password";
fake_ua='If firefox and curl had a child, would it be named furl?';
curl -A "$fake_ua" https://www.itsnotap0rnsiteipromise.com/curvy-girlz/;

vi ~/Documents/maths/super-secret-squirrel/gift-ideas.txt

## this is still NOT logged
histon

## this is logged again
Sudo apt install -y kmag;

0
zpangwin