我一直在玩弄AppleScript和Automator来使该功能正常工作,但是我似乎无法解决这个问题。如果有人可以给我看一个例子,或者给我一些技巧,让我可以设置如何在特定时间关闭应用程序,然后使计算机进入睡眠或关闭状态,将不胜感激。
我一直在玩弄AppleScript和Automator来使该功能正常工作,但是我似乎无法解决这个问题。如果有人可以给我看一个例子,或者给我一些技巧,让我可以设置如何在特定时间关闭应用程序,然后使计算机进入睡眠或关闭状态,将不胜感激。
Answers:
我假设您要启动此过程,而不是让它定期运行。
我的方法是从命令行启动此命令,但是任何命令都可以在经过一些修改的情况下在Automator脚本的Shell脚本组件中运行。以下方法结合了一些组件来完成工作:
tell
命令退出应用程序1.告诉申请退出
这可以很简单:
osascript -e 'tell application "AppName" to quit'
2.使计算机进入睡眠状态
请查看pmset
更多详细信息,但是发出以下命令会使计算机进入睡眠状态:
pmset sleepnow
3.安排要在特定时间运行的操作
看一下at命令。该命令使您能够指定命令运行的时间。您需要启用此功能,因为默认情况下未启用此功能。要启用atrun
守护程序,请运行以下命令[SU上的参考]:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
启用后atrun
,可以通过发出以下命令在特定时间安排任何命令
echo "<command>" | at HH:MM
之所以有效,是因为默认情况下at
会接受它的输入stdin
。一种更简单的方法是运行文件中列出的命令。可以通过使用-f
标志来执行文件,后面是要运行的脚本名称,如下所示:
at -f /path/to/file HH:MM
放在一起
以下假定atrun
已启用。作为一个玩具示例,假设我要退出Mail并使计算机在晚上11点进入睡眠状态。我将创建一个包含要运行的命令的文件,如下所示:
osascript -e 'tell application "Mail" to quit'
pmset sleepnow
将该文件保存到quit-and-sleep
然后在命令行上运行
at -f /path/to/quit-and-sleep 23:00
注意事项
我没有做任何检查来确保Mail实际上已关闭。该脚本还假定其他任何因素都不会妨碍计算机进入睡眠状态。在这里,我将其简单化为您想要的起点。
给定一个硬编码的时间值,这是一个严格的applescript版本,可以完成此操作。当然,您可以根据需要使此部分具有交互性。此外,此版本还假定与今天有关的时间范围。
--Get time setting for action to occur
set t to "3:16:30 PM"
--build a time string to use as a target.
set cd to (current date) as text
set AppleScript's text item delimiters to " "
set targetTime to text items 1 thru -3 of cd
set targetTime to date ((targetTime as text) & " " & t)
repeat while (current date) < targetTime
beep
delay 30 -- check the time every 30 seconds
end repeat
tell application "Mail"
quit
end tell
tell application "Finder"
display dialog "Do you want to shut the computer down now?"
if button returned of the result is "Ok" then
shutdown
end if
end tell
您可以通过以下方式安排一次活动:
at 23:59 <<< 'osascript -e "quit app \"Mail\""; pmset sleepnow'
或者要将其安排为每天重复,请使用编辑crontab EDITOR=nano crontab -e
并添加如下条目:
59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow