在mac OS X下登录时运行脚本

我想知道是否有人能够帮助我得到一个shell (.sh)程序自动运行每当我登录到我的帐户在我的电脑上。我运行的是Mac OS X 10.6.7。

我有一个文件quot;Example.sh"我想在登录电脑时运行的程序。当我已经登录时,运行它没有问题,但我想让它自动运行。

325718 次浏览
  1. 在$HOME文件夹中创建一个名为login.sh的shell脚本。

  2. 将以下一行脚本粘贴到脚本编辑器中:do shell script "$HOME/login.sh"

  3. 保存为应用。

  4. 最后将应用程序添加到登录项。

如果你想让脚本输出可视化,你可以交换步骤2:

tell application "Terminal"
activate
do script "$HOME/login.sh"
end tell

如果需要多个命令,可以使用如下命令:

tell application "Terminal"
activate
do script "cd $HOME"
do script "./login.sh" in window 1
end tell

遵循这个:

  • < p > Automator.app开始

  • < p >选择Application

  • 点击工具栏中的Show library(如果隐藏)

  • Run shell script (from Actions/Utilities)

  • < p >复制,将脚本粘贴到窗口中

  • < p >测试它

  • 保存在某个地方(例如,你可以在你的HOME中创建一个Applications文件夹,你会得到一个your_name.app)

  • go to System Preferences ->Users & GroupsLogin items(或System Preferences ->AccountsLogin items /取决于你的MacOS版本)

  • 添加这个应用

  • < p >测试,做,)

编辑:

我最近获得了一个“好答案”;这是我的答案。虽然我的解决方案简单有效,但在登录时运行任何程序或shell脚本的最干净的方法描述在@trisweb的答案 除非你想要互动性

与自动解决方案,你可以做的事情如下: automator截图登录应用程序

因此,要求运行脚本或退出应用程序,询问密码,在登录时运行其他自动工作流程,在登录时有条件地运行应用程序等等……

使用OSX的本机进程启动器和管理器launchd

为此,创建一个launchctl守护进程。您将完全控制脚本的各个方面。您可以运行一次,也可以作为守护进程继续运行。在大多数情况下,这是正确的方法。

  1. 根据下面的Apple Dev文档中的说明或更多细节创建.plist文件。
  2. 放置在~/Library/LaunchAgents
  3. 登录(或通过launchctl load [filename.plist]手动运行)

关于launchd的更多信息,维基百科的文章非常好,描述了该系统及其相对于其他旧系统的优势。


下面是运行脚本在登录的特定plist文件。

2017/09/25更新OSX El Capitan和更新版本(credit to José小弥赛亚):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.loginscript</string>
<key>ProgramArguments</key>
<array><string>/path/to/executable/script.sh</string></array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

用你想要的命令替换Program键后的<string>(注意,该命令引用的任何脚本必须是可执行的:chmod a+x /path/to/executable/script.sh以确保它适用于所有用户)。

保存为~/Library/LaunchAgents/com.user.loginscript.plist

运行launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist并注销/登录测试(或直接运行launchctl start com.user.loginscript进行测试)

尾部/var/log/system.log为错误消息。

关键是这是一个特定于用户的launchd条目,因此它将在给定用户登录时运行。特定于系统的启动守护进程(放置在/Library/LaunchDaemons中)在引导时运行。

如果您想要一个脚本在所有用户登录时运行,我相信LoginHook是您唯一的选择,这可能是它存在的原因。