在login时运行脚本mac

我想知道是否有人能够帮我一个.sh文件运行,当我login到我的电脑上我的帐户。 我正在运行Mac OS X 10.6.7。

我有一个文件“Example.sh”,当我login到我的电脑时,我想运行。 我没有问题,当我已经login,但我希望这个自动运行。

人们正在说要将它添加到loginshell文件,但我不知道这是什么。 请帮助一些。

您可以:

  • 启动Automator.app
  • select“应用程序”
  • 点击工具栏中的“显示库”(如果隐藏)
  • 添加“运行shell脚本”(从Actions / Utilities)
  • 将您的脚本复制并粘贴到窗口中
  • testing它
  • 保存在某个地方,例如你可以在你的HOME中创build一个“Applications”文件夹(你会得到一个your_name.app)

    更新 :对于最新的macOS,请将您的文件命名为your_name.command而不是your_name.app

  • 进入系统首选项 – >帐户 – >login项目

  • 添加这个程序
  • testing完成;)

编辑:

我最近为这个答案赢得了“好答案”徽章。 虽然我的解决scheme很简单并且工作,但在@ trisweb的答案中描述了在login时运行任何程序或shell脚本的最简单的方法除非您需要交互性

使用automator解决scheme,你可以做下一件事情: automator截图登录应用程序

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

tl; dr:使用OSX的本地进程启动器和pipe理器, launchd

为此,请创build一个launchctl守护进程。 您将完全控制脚本的各个方面。 你可以运行一次或保持作为守护进程。 在大多数情况下,这是要走的路。

  1. 根据下面的Apple Dev文档中的说明创build一个.plist文件。
  2. 放置在~/Library/LaunchAgents
  3. login(或通过launchctl load [filename.plist]手动运行)

有关launchd更多信息, 维基百科的文章相当不错,介绍了系统及其优于其他旧系统的优势。


以下是在login时运行脚本的特定plist文件。

OSX El Capitan和更新的2017/09/25更新(信任JoséMessias Jr ):

 <?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> 

用你想要的命令replaceProgram键后面的。

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

运行launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist并注销/进行testing(或直接testing,运行launchctl start com.user.loginscript

尾巴/var/log/system.log错误消息。

关键是这是一个特定于用户的启动项,所以它将在给定用户的login时运行。 系统特定的启动守护进程(放置在/Library/LaunchDaemons )在启动时运行。

如果你想要一个脚本运行login所有用户,我相信LoginHook是你唯一的select,这可能是它存在的原因。

  1. 在您的$ HOME文件夹中创build您的shell脚本作为login.sh

  2. 将以下一行脚本粘贴到脚本编辑器中:

    做shell脚本“$ HOME / login.sh”

  3. 然后将其保存为应用程序。

  4. 最后将该应用程序添加到您的login项目。

如果要使脚本输出可视化,则可以将步骤2replace为:

 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