Saya ingin menjalankan beberapa perintah tetapi tidak ingin menyimpannya dalam sejarah perintah. Sehingga tak seorang pun akan dapat mencarinya di .bash_historyfile.
Apakah ada cara bagaimana menjalankan perintah bash dengan cara ini?
Saya ingin menjalankan beberapa perintah tetapi tidak ingin menyimpannya dalam sejarah perintah. Sehingga tak seorang pun akan dapat mencarinya di .bash_historyfile.
Apakah ada cara bagaimana menjalankan perintah bash dengan cara ini?
Jawaban:
Mulai perintah Anda dengan spasi dan itu tidak akan dimasukkan dalam sejarah.
Ketahuilah bahwa ini memerlukan variabel lingkungan $HISTCONTROLuntuk diatur.
Periksa apakah perintah berikut mengembalikan ignorespaceatau
ignoreboth
#> echo $HISTCONTROLUntuk menambahkan variabel lingkungan jika tidak ada, baris berikut dapat ditambahkan ke profil bash. Misalnya%HOME/.bashrc
export HISTCONTROL=ignorespaceSetelah sumber profil lagi perintah ruang awalan tidak akan ditulis $HISTFILE
Di setiap sesi Bash yang diberikan, setel file riwayat ke / dev / null dengan mengetik:
export HISTFILE=/dev/null
Perhatikan bahwa, sebagaimana ditunjukkan dalam komentar, ini tidak akan menulis perintah apa pun di sesi itu ke riwayat!
Hanya saja, jangan main-main dengan kerja keras administrator sistem Anda, tolong;)
Solusi Doodad lebih elegan. Cukup atur variabel: unset HISTFILE(terima kasih!)
/dev/nullizin yang diatur ke 0600 pada saat logout. Sebaliknya saya menggunakan unset HISTFILE.
Perpanjangan dari jawaban @John Doe & @ user3270492. Tapi, ini sepertinya berhasil untukku.
<your_secret_command>; history -d $((HISTCMD-1))
Anda seharusnya tidak melihat entri perintah dalam riwayat Anda.
Inilah penjelasannya ..
'History -d' menghapus entri yang disebutkan dari histori.
HISTCMD menyimpan nomor perintah dari yang akan dieksekusi selanjutnya. Jadi, (HISTCMD-1) mengacu pada perintah yang dieksekusi terakhir.
Anda mungkin mempertimbangkan menggunakan shell tanpa histori, seperti mungkin
/bin/sh << END
your commands without history
END
(mungkin /bin/dashatau /bin/sashbisa lebih tepat daripada /bin/sh)
atau bahkan lebih baik menggunakan utilitas batch mis
batch << EOB
your commands
EOB
Sejarah akan berisi shatau batchyang tidak terlalu berarti
Anda dapat memulai sesi Anda dengan
export HISTFILE=/dev/null ;history -d $(history 1)
kemudian lanjutkan dengan perbuatan licik Anda. Mengatur histfile agar /dev/nullakan dicatat ke file histori, namun entri ini akan segera dihapus dan tidak ada jejak (setidaknya dalam file histori) akan ditampilkan.
Juga, ini tidak permanen.
Seperti yang disebutkan oleh Doodad dalam komentar , unset HISTFILEmelakukan ini dengan baik, tetapi jika Anda juga ingin juga menghapus beberapa riwayat, lakukan echo $HISTFILEuntuk mendapatkan lokasi file riwayat (biasanya ~/.bash_history) unset HISTFILE, dan edit ~/.bash_history(atau apa pun HISTFILEitu - tentu saja sekarang unsetsehingga Anda dapat ' t membacanya).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Kemudian Anda telah mengedit riwayat Anda, dan fakta bahwa Anda telah mengeditnya!
unset HISTFILE; echo TEST; historyakan memberi Anda perintah echo TESTseperti sebelumnya ke yang terakhir. Meskipun setelah mengakhiri sesi dan terhubung lagi, sejarah tidak memiliki entri ini. Jadi saya akan mengatakan itu bekerja :)
unset HISTFILEtampaknya tidak menghentikan perintah yang direkam dalam riwayat dalam memori, tetapi itu menghentikan mereka yang direkam dalam file apa pun yang $ HISTFILE. Jadi saya kira Anda masih memiliki sejarah lokal di memori, tetapi tidak direkam dalam file lagi, yang mungkin Anda inginkan! ;)
Anda juga dapat menggunakan perintah berikut:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Saya pikir itu perintah yang sangat portabel.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"dan sekarang Anda dapat melakukannya seperti ini:mysql -uroot -pSecretPassword ; forget
$sdan hal-hal lain dalam sed. function forget() { // put code here // }
Jika Anda menggunakan zsh, Anda dapat menjalankan:
setopt histignorespace
Setelah ini diatur, setiap perintah yang dimulai dengan spasi akan dikecualikan dari sejarah.
Anda dapat menggunakan alias dalam .zshrcuntuk mengubah ini on / off :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
Ada beberapa cara untuk mencapai hal ini. Ini menetapkan ukuran file riwayat ke 0:
export HISTFILESIZE=0
Ini mengatur file histori untuk /dev/null, secara efektif menonaktifkannya:
export HISTFILE=/dev/null
Untuk perintah individual, Anda bisa mengawali perintah dengan spasi dan itu tidak akan disimpan dalam file histori. Perhatikan bahwa ini mengharuskan Anda memiliki ignorespacenilai yang termasuk dalam $HISTCONTROLvariabel lingkungan (man bash dan cari ignorespacedetail lebih lanjut).
Anda hanya perlu menjalankan:
$ set +o history
Untuk melihat lebih banyak, jalankan:
$ man set
set -x historysetelah itu, itu berfungsi.
Perintah ini mungkin berguna. Ini tidak akan merekam perintah yang dieksekusi
history -d $((HISTCMD-1)) && <Your Command Here>