2017-04-03 156 views
1

我想在我的Mac上执行一个bash脚本来启动命令行程序caffeinate。但是,如果我是这样开始的:bash:退出程序执行,但在退出脚本后关闭程序

#!/bin/bash 
caffeinate 

它不会返回和终端将被锁定。这不是我想要的。但另一方面,如果我关闭终端,程序也应该退出。我怎么能做到这一点?

我已经试过玩returnexit,但没有得到我想要的东西。

+0

我可能误解了答案,通过“不返回,终端将被阻塞”是否意味着您不希望终端窗口在程序运行时挂起,即它应该默默运行?我认为其他一些解决方法是使用AppleScript或Automator,或者将其与Platypus捆绑在一起。 – chrstphrchvz

+0

说实话,这正是我无法做到的:将鸭脚本与脚本捆绑在一起!现在,如果我只有'#!/ bin/bash caffeinate'的脚本,那么应用程序将挂起 - 这意味着它不响应。这就是为什么我试图为鸭嘴兽获得一个工作脚本。 – Endogen

回答

1

试着这么做:

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

该脚本将需要来源(使用source.),以便陷阱位于呼叫shell(您希望用来触发终止咖啡因的终止)的上下文中。

+0

对不起,延迟回复:仍然不是我需要的。当我执行脚本时,终端在运行脚本后仍然没有准备好执行另一个命令。当我运行这个时,我无法在终端中做任何事情。当我使用'./caffeinate'(这是脚本的文件名)在脚本的同一目录中运行这个时,我得到错误'trap:usage:trap [-lp] [arg signal_spec ...]' – Endogen

+0

对不起,我的代码中有一个错误(在'trap'行末尾缺少'EXIT')。但是,请记住,此脚本必须来源('。/ caffeinate'或'caffeinate'),而不是像您一样在单独的过程中执行。 – Fred

+0

做它应该做的。感谢那!另一个问题:有没有办法在脚本中添加'source'或'./'?因为我需要运行脚本。我没有办法在执行脚本的时候添加这个脚本 – Endogen

0

这是由Terminal.app引起的,现有的解决方法是将go into Terminal's preferences设置为“当shell退出:”到“关闭窗口”,并将“关闭之前询问:”设置为“从不”或“仅限如果还有其他进程登录shell和:“,并将程序添加到关闭窗口时不提示用户的程序列表中(不确定第二部分是否适用于脚本,也不知道是否有更多使用更多的bash和AppleScript代码,以便最终用户不需要改变任何首普遍的解决办法)