杀死终端后是否可以执行bashscript?
我知道有一个名为的文件.bash_profile,它在您打开终端时执行代码(bashscript)。
还有另一个文件被调用.bash_logout,当您退出终端时执行代码。
当终端被杀死时我将如何执行一些脚本?
(.bash_logout当终端被杀死时不要覆盖这个)。
回答
当终端被杀死时我将如何执行一些脚本?
我将此解释为“在终端窗口关闭时执行脚本”。为此,请在您的.bashrcor 中添加以下内容.bash_profile:
trap '[ -t 0 ] || command to execute' EXIT
当然,您可以将所有命令替换command to execute为source ~/.bash_exit并将所有命令放在.bash_exit主目录中的文件中。
每当 shell 退出时,都会执行特殊的 EXIT 陷阱(例如,通过关闭终端,但也可以通过按CtrlD提示,或执行exit, 或 ...)。
[ -t 0 ]检查 stdin 是否连接到终端。由于||下一个命令仅在该测试失败时执行,它在关闭终端时执行,但不适用于其他常见的退出 bash 的方式(例如按下CtrlD提示或执行exit)。
失败的尝试(仅当您尝试查找和替代时才读取)
在我听说过的终端中,当窗口关闭时,bash 总是会收到一个 SIGHUP 信号。有时甚至有两个 SIGHUP;一个来自终端,一个来自内核,当 pty(伪终端)关闭时。但是,有时在交互式会话中两个 SIGHUP 都会丢失,因为 bash 的readline 临时使用了它自己的 traps。奇怪的是,当存在 EXIT 陷阱时,SIGHUP 似乎总是被捕获;即使那个 EXIT 陷阱什么也不做。
但是,我强烈建议不要在 SIGHUP 上设置任何陷阱。Bash 仅在当前命令完成后处理非 EXIT 陷阱。如果您运行sh -c 'while true; do true; done'并关闭终端,bash 将继续在后台运行,就像您使用了disown或 一样nohup。