.Bash_logout'un neden komut çalıştırmadığını açıklayın?


11

Bu yüzden Terminal'in açık bir örneğini her kapattığımda bu iki kod satırını nasıl çalıştıracağımı merak ettim:

history -c
cat /dev/null > ~/.bash_history

Ben export HISTFILE=5başlangıçta, ama yine de bittiğimde bunu temizlemek istiyorum.

Ben denedim biraz etrafa bir yer yerlerin çift ve daha fazla şans olmadı .

Linux Mint'i çalıştırıyorum ve burada da benzer bir sorunla karşılaştığımı .bash_profile; nihayet, tüm başlangıç ​​kodunu yerleştirmem gerektiğini keşfettim .bashrc, belki de bununla bir ilgisi var. İşte benim .bash_logoutdosyam:

#!/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

Bu komut dosyasını birçok yolla yeniden düzenlemeyi denedim, bash'ın nasıl çalıştığını anlamıyorum ve ilk etapta herhangi biri çalışıyorsa emin değilim. Çalıştırdığım gerçeği Xserverbash'ı Terminal'e çıkışta çıkış yapmayan bir şey olarak mı düşünüyor?

Ben olduğumu yazıyor değil mantıklıdır ki, oturum:

$> shopt login_shell
login_shell     off

Genel bir yorum olarak, bir kabuk yapılandırma komut dosyasının çalıştırılıp çalıştırılmadığını test ediyorsanız, çalıştırma echoişlemine müdahale edebilecek başka bir şey yapmadan önce komutu başlangıçta koymanızı öneririm echo. Bir hata, komut dosyasının sonuna gelmeden çıkmasına neden olabilir.
Chris Page

Bunu ifade etme şeklinizden ve SHLVL = 1 için kontrol ettiğinizden, bunun bir giriş kabuğu olduğunu zaten doğruladığınızı varsayıyordum. Bu mu? Ne shopt login_shelldiyor?
Chris Sayfa

Yanıtlar:


25

Bunun bir giriş kabuğu ( shopt login_shell) olduğunu doğruladığınızı varsayarsak :

~ / .bash_logout, yalnızca kabuktan açıkça exitveya ile çıkarsanız veya logoutkomut istemine bir dosya sonu girmek için Control-D yazarak çalıştırılır. Terminal öykünücüsünü kapatırsanız, işlemler SIGHUP gönderilir ve bash bu durumda ~ / .bash_logout komutunu çalıştırmaz.

Herhangi bir zamanda bash çıkışından (ve bu bir giriş kabuğu olup olmadığından) çalışmak istiyorsanız, kullanın trap foo EXIT. Bunu yapmanın en uygun yolu, kodunuzu bir kabuk işlevine koymaktır, örneğin:

print_goodbye () { echo Goodbye; }
trap print_goodbye EXIT

1
Kötü sorumu boşa harcamış gibi hissediyorum. İlk cümlenizi geçip hala sorunum olup olmadığını tekrar soracağım . Sheesh.
Droogans

6

~/.bash_logoutyalnızca bir oturum açma kabuğu tarafından çalıştırılır (örneğin, tty oturumlarına girdiğiniz veya olduğu gibi bash -l). Çoğu terminalin çalıştığı giriş dışı mermiler tarafından göz ardı edilir.

Daha fazla ayrıntı için "İNVOKASYON" başlığı altında bash (1) kılavuz sayfasına bakınız.


Kalıcı geçmişi tutmak istemiyorsanız, yalnızca HISTFILEayarlamayı kaldırın veya ayarlayın HISTFILE=/dev/null. Bu işlem, çıkışta geçmişi otomatik olarak siler, ancak geçerli kabuk ( HISTSIZE=100) için saklanmasına izin verir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.