bash - 杀死终端后是否可以执行bashscript?
问题描述
我知道当您打开终端时有一个名为.bash_profile
执行代码(bashscript)的文件。
当您退出终端时,还会调用另一个文件来.bash_logout
执行代码。
当终端被杀死时我将如何执行一些脚本?
(.bash_logout
当终端被杀死时不要覆盖这个)。
解决方案
当终端被杀死时我将如何执行一些脚本?
我将此解释为“在终端窗口关闭时执行脚本”。为此,请在.bashrc
or中添加以下内容.bash_profile
:
trap '[ -t 0 ] || command to execute' EXIT
当然,您可以将所有命令替换command to execute
为source ~/.bash_exit
并将所有命令放入.bash_exit
主目录中的文件中。
每当 shell 退出时,都会执行特殊的 EXIT 陷阱(例如,通过关闭终端,也可以通过按CtrlD提示,或正在执行exit
,或...)。
[ -t 0 ]
检查标准输入是否连接到终端。由于||
只有在测试失败时才会执行下一个命令,这在关闭终端时会执行,但对于退出 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
or一样nohup
。
推荐阅读
- python-3.x - 使用 Xpath 单击带有 selenium 的按钮不起作用
- splunk - 在可在 OpsGenie 中访问的 Splunk OpsGenie 应用程序中设置优先级
- javascript - Firebase:如果currentUser为null,如何在http请求上刷新idToken
- android - BUILD FAILED in 10m 18s Finished with error: Gradle task assembleDebug failed with exit code 1
- python - 熊猫数据框的减法
- javascript - 每次我使用 javascript 提交表单时,我的 LI 都会重复
- google-cloud-platform - 没有支持合同的 GCP 项目迁移
- c# - 试图在同一视图上显示来自同一模型的两个不同的数据表
- tizen - How to add rounded background or ellipsical shape on Tizen native wearable?
- azure - IISExpress - 由于权限不足,redirection.config 无法读取配置文件