有没有办法在shell脚本中关闭终端窗口?我有一个.command文件,一旦完成就应该完全放弃。
答案 0 :(得分:57)
使用exit 0
将彻底终止脚本。
终端窗口是否保持打开是用户可配置的。默认设置是始终保持打开状态。要改变这个:
Terminal.app > Preferences > Profiles > Shell
- "When the shell exists:"
> Close if the shell exited cleanly
- "Ask before closing:"
(•) Never
-- OR --
(•) Only if there are....
当使用“如果shell干净地退出时关闭”,如果退出结果为0,脚本将关闭窗口,如果没有出错,这是默认值。
答案 1 :(得分:20)
由于您不想删除所有终端窗口,请先从"终端"更改窗口名称。别的东西:
echo -n -e" \ 033] 0;我的窗口名称\ 007"
然后在脚本的末尾,使用:
osascript -e'告诉应用程序"终端"关闭(每个窗口的名称包含"我的窗口名称")' &安培;
答案 2 :(得分:15)
您可以使用apple script
退出 terminal app
。将以下内容添加到脚本中 -
osascript -e 'tell application "Terminal" to quit'
这将为您提供一个确认关闭应用程序的弹出窗口。您可以在终端首选项中禁用此功能。
或者,您也可以使用killall
命令退出应用程序。以下也适用。
killall Terminal
正如旁注,您可以自由地将上述命令添加到您的脚本中,它可以按您的需要工作。但是,有一些警告。 首先,您将限制脚本在不同的框上工作的能力。 其次,使用nohup
会更安全,这样任何当前运行的命令都不会因退出Terminal app
而退出。
答案 3 :(得分:9)
这对我有用:
#!/bin/sh
{your script here}
osascript -e 'tell application "Terminal" to close (every window whose name contains ".command")' &
exit
这将仅用于关闭使用.command文件打开的窗口,但保留已在其他终端窗口中运行的内容。我知道我几乎总是有sass或grunt看东西,所以我不想完全退出终端。
答案 4 :(得分:7)
closeWindow() {
/usr/bin/osascript << _OSACLOSE_
tell application "Terminal"
close (every window whose name contains "YourScriptName")
end tell
delay 0.3
tell application "System Events" to click UI element "Close" of sheet 1 of window 1 of application process "Terminal"
_OSACLOSE_
}
这将关闭脚本的终端窗口,并在其窗口标题不匹配时保持其他任何终端窗口打开。要使其工作,必须将终端添加到允许使用Accessibility框架的应用程序列表中。您还可以使用repeat命令在终端窗口中循环,并关闭每个窗口x,其中包含工作表1上的UI元素“关闭”。
答案 5 :(得分:5)
我发现最好的解决方案是使用Automator创建一个真正的OSX应用程序,无论您的系统配置如何,它都将以相同的方式工作。您可以让Automator运行您的shell脚本,或者您可以将shell脚本本身嵌入Automator中。
以下是您的操作方法: