所以我一直想知道每次关闭打开的终端实例时如何运行这两行代码:
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
答案1
假设您已验证它是一个登录 shell ( shopt login_shell
):
exit
仅当您使用或明确退出 shell 时logout
,或者在命令提示符下键入 Control-D 以输入文件结尾时,才会运行 ~/.bash_logout。如果您关闭终端仿真器,进程将收到 SIGHUP,并且 bash 在这种情况下不会运行 ~/.bash_logout。
如果您想在 bash 退出时执行工作(无论它是否是登录 shell),请使用trap foo EXIT
。最方便的方法是将代码放在 shell 函数中,例如:
print_goodbye () { echo Goodbye; }
trap print_goodbye EXIT
答案2
~/.bash_logout
仅由登录shell(例如您在 tty 会话中获得的 shell,或者使用bash -l
)。它会被大多数终端运行的非登录 shell 忽略。
有关更多详细信息,请参阅 bash(1) 手册页的“INVOCATION”部分。
如果你不想保留持久历史记录,只需取消设置HISTFILE
或设置HISTFILE=/dev/null
。这将在退出时自动丢弃历史记录,同时仍允许将其保留在当前 shell 中(HISTSIZE=100
)。
答案3
我认为您应该能够使用以下命令实现相同的结果(仅保留当前会话的历史记录而不将其保存到磁盘)命令:
>$HISTFILE;export HISTFILE=;echo "export HISTFILE=" >> ~/.bashrc
为每个需要执行以下操作的用户运行该命令:清空 bash 历史文件;取消设置 bash 历史文件
结果:它显然只记住活动会话中的历史记录(在特定用户可访问的内存中),使用“history”命令查看当前会话历史记录,而不是将其保存到 bash_history 或磁盘上的任何其他文件中。
在我终止具有活动会话的终端应用程序并再次登录后,历史记录从文件和历史命令输出中消失了。