我是新手,因此在阅读其他类似问题的帖子时,我无法做出正面或反面。
我正在尝试在启动时运行终端命令,然后关闭终端。
我正在尝试运行的内容: cd / Applications / Sick-Beard-development [enter] python sickbeard.py -d [enter]
我对其他解决方案持开放态度
答案 0 :(得分:4)
这样做的简单方法就是将所有不必要的东西排除在外。
您要做的是在启动时运行Python脚本。您不希望在终端窗口或任何内容中看到它,因此不需要涉及Terminal.app。你有一个shell脚本的唯一原因是设置工作目录,有更好的方法来做到这一点。大概是你用AppleScript拖动的唯一原因是终端。
您要做的是将Python脚本作为启动代理运行。 Apple的文档可能对新手来说有点混乱,但是有一些很棒的博客文章,比如this one by Nathan Grigg。
这个想法是你创建一个plist文件(通过手工编辑XML格式,或者使用OS X和/或Xcode附带的plist编辑器之一,或者使用像Lingon这样的第三方工具)告诉OS X“当这些条件为真时,在该工作目录中运行此命令”。然后将该文件放在〜/ Library / LaunchAgents中。然后你告诉launchctl
加载它。你已经完成了。
你的plist看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.user3159170.sickbeard</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python</string>
<string>/Applications/Sick-Beard-development/sickbeard.py</string>
<string>-d</string>
</array>
<key>WorkingDirectory</key>
<string>/Applications/Sick-Beard-development/</string>
<key>RunAtLoad</key>
<true />
<key>LaunchOnlyOnce</key>
<true />
</dict>
</plist>
这些设置将确保OS X在您第一次加载启动代理时运行程序,并且在每次后续重新启动后第一次登录时运行程序,而不是其他时间,我认为这是您想要的。但man launchd.plist
将为您提供所有选项的详细信息(或者,再次阅读链接的博客文章并搜索其他选项)。
将其保存为〜/ Library / LaunchAgents / org.user3159170.sickbeard.plist。
现在,在终端,执行此操作:
launchctl load ~/Library/LaunchAgents/org.user3159170.sickbeard.plist
您可能需要查看您的Console.log以了解会发生什么。您可以尝试手动启动和停止它(man launchctl
将解释如何,但基本上它只是launchctl start org.user3159170.sickbeard
)。运行launchctl list
以确保它显示出来。一旦它看起来一切正常,重启机器,登录,并确保它再次运行。如果确实如此,那就完成了。