Jadi saya sudah bertanya-tanya bagaimana menjalankan dua baris kode ini setiap kali saya menutup instance terbuka Terminal:
history -c
cat /dev/null > ~/.bash_history
Saya export HISTFILE=5
memulai, tetapi masih ingin menyiramnya ketika saya selesai.
Saya sudah mencoba melihat-lihat sedikit di beberapa tempat , dan belum beruntung .
Saya menjalankan Linux Mint, dan juga mencatat di sini bahwa saya mengalami masalah yang sama dengan .bash_profile
; akhirnya, saya menemukan bahwa saya harus meletakkan semua kode start up .bashrc
, jadi mungkin itu ada hubungannya dengan itu. Ini .bash_logout
file saya :
#!/bin/bash
# ~/.bash_logout: executed by bash(1) when login shell exits.
#this does nothing on exit...
echo 'logout'; sleep 2s
# when leaving the console clear the screen to increase privacy
if [ "$SHLVL" = 1 ]; then
history -c
cat /dev/null > ~/.bash_history
[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
Saya sudah mencoba mengatur ulang skrip ini dengan banyak cara, saya tidak yakin apakah saya tidak mengerti cara kerja bash, dan apakah ada yang berjalan pada awalnya. Apakah fakta yang saya jalankan Xserver
membuat bash mempertimbangkan Terminal sesuatu yang bukan merupakan log-out saat keluar?
Itu mengatakan bahwa saya tidak masuk, yang masuk akal:
$> shopt login_shell
login_shell off
sumber
echo
perintah di awal, sebelum melakukan hal lain yang dapat menggangguecho
menjalankan. Kesalahan dapat menyebabkan skrip keluar sebelum skrip berakhir.shopt login_shell
dikatakan?Jawaban:
Dengan asumsi Anda telah memverifikasi bahwa itu adalah shell login (
shopt login_shell
):~ / .bash_logout hanya dijalankan jika Anda secara eksplisit keluar dari shell dengan
exit
ataulogout
, atau dengan mengetik Control-D untuk memasukkan file-akhir pada prompt perintah. Jika Anda menutup emulator terminal, proses dikirim SIGHUP, dan bash tidak menjalankan ~ / .bash_logout dalam kasus itu.Jika Anda ingin melakukan pekerjaan kapan saja bash keluar (dan apakah itu shell login atau tidak), gunakan
trap foo EXIT
. Cara paling mudah untuk melakukan ini adalah dengan meletakkan kode Anda di fungsi shell, misalnya ,:sumber
~/.bash_logout
hanya dijalankan oleh shell login (seperti yang Anda dapatkan di sesi tty, atau denganbash -l
). Itu diabaikan oleh shell non-login, yang sebagian besar terminal berjalan.Lihat halaman manual bash (1), di bawah "INVOCATION", untuk detail lebih lanjut.
Jika Anda tidak ingin menyimpan riwayat persisten, cukup
HISTFILE
setel, atau setelHISTFILE=/dev/null
. Ini akan secara otomatis membuang riwayat saat keluar, sambil tetap membiarkannya disimpan untuk shell saat ini (HISTSIZE=100
).sumber