解释为什么 .bash_logout 不会运行命令?

Dro*_*ans 12 terminal linux-mint .bash-profile

所以我一直想知道如何在每次关闭终端的打开实例时运行这两行代码:

history -c
cat /dev/null > ~/.bash_history
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我已经尝试以多种方式重新安排这个脚本,我不确定我是否不明白 bash 是如何工作的,以及是否首先运行了这些脚本。我运行Xservermake bash的事实是否认为终端不是退出时的注销?

它确实说我没有登录,这是有道理的:

$> shopt login_shell
login_shell     off
Run Code Online (Sandbox Code Playgroud)

Chr*_*age 29

假设您已经验证它是一个登录 shell ( shopt login_shell):

~/.bash_logout 仅在您使用exit或显式退出外壳程序时运行logout,或者通过键入 Control-D 在命令提示符下输入文件结尾。如果关闭终端模拟器,进程会发送 SIGHUP,在这种情况下 bash 不会运行 ~/.bash_logout。

如果您想在 bash 退出时随时执行工作(无论它是否是登录 shell),请使用trap foo EXIT. 最方便的方法是将您的代码放在 shell 函数中,例如:

print_goodbye () { echo Goodbye; }
trap print_goodbye EXIT
Run Code Online (Sandbox Code Playgroud)

  • 我觉得我的坏问题浪费了一个完美的问题。如果我通过了你的*第一句话*并且仍然遇到麻烦,我会再次询问。谢什。 (2认同)

use*_*686 6

~/.bash_logout仅由登录shell运行(例如您在 tty 会话中获得的,或使用bash -l)。它被大多数终端运行的非登录 shell 忽略。

有关更多详细信息,请参阅 bash(1) 的手册页,在“INVOCATION”下。


如果您不想保留持久的历史记录,只需 unsetHISTFILE或 set HISTFILE=/dev/null。这将在退出时自动丢弃历史记录,同时仍允许为当前 shell ( HISTSIZE=100)保留它。