在我的shell脚本中,我的最后几行是:
...
echo "$l" done
done
exit
我将终端首选项设置为“当shell退出时:关闭窗口”。在所有其他情况下,当我键入“exit”或“logout”时,在终端中,窗口关闭,但对于这个“.command”文件(我可以双击我的shell脚本文件,脚本运行),而不是关闭窗口,而文件的代码说“exit”,屏幕上显示的是:
...
$l done
logout
[Process completed]
……Windows仍然开着。有人知道如何运行shell脚本,然后在完成时自动退出终端窗口吗?
谢谢你,谢谢
8条答案
按热度按时间zphenhs41#
我终于找到了答案。与cobbal的答案类似,它调用了AppleScript,但由于它是我打开的唯一窗口,并且我想运行我的脚本作为快速打开和关闭操作,这种更野蛮的方法对我来说很好。
在“.command”脚本本身中,“...将这一行添加到脚本的末尾”
SOURCE:WANG JING
v1l68za42#
这对我来说很完美。它只是关闭执行窗口,而其他终端窗口则打开
只需打开终端,然后转到终端>首选项>设置> shell :>当shell退出时:->如果shell干净地退出则关闭
然后就加上退出;在你档案的最后
0pizxfdo3#
使用“终端>首选项>设置> shell :>当shell退出时:-> Close if the shell exited cleanly'选项,但是
作为命令文件的最后一行。这确保了脚本确实“干净地退出”--否则,如果前一个命令没有返回成功,那么窗口将不会关闭。
y1aodyip4#
除了必须使用上面的AppleScript解决方案之外,这是唯一一个可以工作的shell脚本解决方案(
exit
没有),即使突然,对我来说(在OS X 10.9中测试):当然,这将杀死所有正在运行的终端示例,因此如果您在启动脚本之前正在处理终端窗口,它也将被终止。幸运的是,重新启动Terminal可以让您进入“已恢复”状态,但是,这必须仅在边缘情况下考虑,而不是作为一个干净的解决方案。
7tofc5zh5#
在终端应用程序中有一个设置。不幸的是,它是相对于所有终端窗口的,而不仅仅是那些通过.command文件启动的窗口。
f8rj6qna6#
你可以使用一些applescript hacking:
将
/dev/ttys002
替换为tty9o685dep7#
我在脚本中使用以下命令
退出-n终端
当然,你必须将终端设置为在关闭前从不提示。
qxgroojn8#
这种组合的答案对我来说是最好的。我正在使用iTerm2,所以我没有退出整个终端程序的问题。
将终端“关闭前询问”设置为
never
Terminal > Settings > Profiles tab > Shell > Ask before closing: never
我添加了一个命令来关闭当前的终端窗口,命令+ w。否则,在每次运行.command文件后,将恢复上一个终端窗口。
终端需要有发送击键的权限。终端应该要求添加此权限,或者您可以在
macOS settings > privacy & security > accessibility > Terminal
中手动启用它从接受的答案:有人能解释一下为什么没有“在后台运行”选项
&
就不能很好地工作吗?