そのため、ターミナルの開いているインスタンスを閉じるたびに、次の2行のコードを実行する方法を考えていました。
history -c
cat /dev/null > ~/.bash_history
私は起動時にexport HISTFILE=5
を実行しましたが、完了した後もそれをフラッシュしたいです。
私は 少し見回す を 場所のカップル で試しました 運があまりありませんでした 。
Linux Mintを実行していますが、.bash_profile
で同様の問題が発生したことにも注意してください。最終的に、すべての起動コードを.bashrc
に配置する必要があることに気付きました。それは、おそらくそれと関係があります。これが私の.bash_logout
ファイルです:
#!/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
このスクリプトをさまざまな方法で再配置しようとしましたが、bashがどのように機能するかがわからないかどうか、そもそもこれらのいずれかが実行されているかどうかはわかりません。私がXserver
を実行するという事実は、bashにターミナルを考慮させる 終了時のログアウトではないもの
私はログインしていないと言っていますが、これは理にかなっています:
$> shopt login_Shell
login_Shell off
ログインシェル(shopt login_Shell
)であることを確認したと仮定します。
〜/ .bash_logoutは、exit
またはlogout
を使用してシェルを明示的に終了した場合、またはコマンドプロンプトでControl-Dを押してファイルの終わりを入力した場合にのみ実行されます。ターミナルエミュレータを閉じると、プロセスにSIGHUPが送信され、その場合、bashは〜/ .bash_logoutを実行しません。
Bashが終了するたびに(そしてそれがログインシェルであるかどうかにかかわらず)作業を実行したい場合は、trap foo EXIT
を使用します。これを行う最も便利な方法は、コードをシェル関数に配置することです。
print_goodbye () { echo Goodbye; }
trap print_goodbye EXIT
~/.bash_logout
は、loginシェル(ttyセッションで取得するシェルやbash -l
など)によってのみ実行されます。ほとんどの端末が実行する非ログインシェルでは無視されます。
詳細については、bash(1)のマニュアルページの「INVOCATION」を参照してください。
永続的な履歴を保持したくない場合は、HISTFILE
を設定解除するか、HISTFILE=/dev/null
を設定します。これにより、終了時に履歴が自動的に破棄されますが、現在のシェル(HISTSIZE=100
)では履歴を保持できます。