bash:return 从程序执行开始但在退出脚本后关闭程序

bash: return from program execution but close program after exiting script

我想在我的 Mac 上执行一个 bash 脚本,它将启动命令行程序 caffeinate。但是如果我这样开始:

#!/bin/bash
caffeinate

不会return,终端会被屏蔽。那不是我想要的。但另一方面,如果我关闭终端,程序也应该退出。我怎样才能做到这一点?

我已经尝试过 returnexit 但无法得到我想要的东西。

这是由 Terminal.app 引起的,其中现有的解决方法是 go into Terminal's preferences 并将 "When the shell exits:" 设置为 "Close window",或者将 "Ask before closing:" 设置为 "Never" 或 "Only if there are other processes other then the login shell and:" 并将您的程序添加到关闭 window 时不提示用户的程序列表中。(不确定第二部分是否适用于脚本,也不确定是否有使用更多 bash 和 AppleScript 代码的更通用的解决方法,以便最终用户无需更改任何首选项。)

试试像这样的东西:

#!/bin/bash
trap 'kill -TERM $caffeinate_pid' EXIT
caffeinate &
caffeinate_pid=$!

此脚本需要源代码(使用 source.),以便陷阱位于调用 shell 的上下文中(您要终止的调用用于触发咖啡因的终止)。