登录mac时运行脚本

MZimmerman6 255 bash shell terminal login osx-snow-leopard

我想知道是否有人能够帮助我在我的计算机上登录帐户时运行.sh文件.我正在运行Mac OS X 10.6.7.

我有一个文件"Example.sh",我想在我登录计算机时运行.我已登录时运行它没有问题,但我想让它自动运行.

人们说要将它添加到登录shell文件中,但我不知道它在哪里.请帮忙.

trisweb.. 357

tl; dr:使用OSX的本机进程启动器和管理器launchd.

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

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

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


这是在登录时运行脚本的特定plist文件.

为OSX埃尔卡皮坦和更新(信贷更新2017年9月25日何塞弥赛亚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>

<string>用您想要的命令替换Program key之后的.

另存为 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)在引导时运行.

如果您希望脚本在登录时为所有用户运行,我相信LoginHook是您唯一的选择,这可能就是它存在的原因.

  • 你忽略了提到Automator行为的可疑之处,以及为什么他们'不推荐'. (8认同)
  • _/Library/LaunchAgents/_中的Plist文件在登录时使用登录用户的id运行._/Library/LaunchDaemons/_中的Plist文件在引导时以root身份运行(可以使用_User_键更改id). (6认同)
  • 是.FWIW我发现这个博客对同一技术有帮助:http://developernotes.com/archive/2011/04/06/169.aspx (4认同)
  • 以下是关于文件夹操作与launchctl的一个很好的概述:http://apple.stackexchange.com/a/63731/38290 - 另一个关于LoginHook的限制之一(只允许一个脚本) - http://superuser.com/a/ 377401.这不是一个可疑或糟糕的方法,但在大多数情况下,"launchctl"只是好得多,并且让您可以更好地控制运行脚本的所有可能方面.它更像是"为什么在launchd存在时使用功能较少的方法?" (注意我已经改变了第一句话,表明我个人*不建议这种情况). (4认同)
  • 想知道如何创建LaunchDaemon plist每次运行**当用户登录时****.所以,不是在系统启动时,而是**每次**用户登录时(尝试使用logout-login循环).你能否准确****(不仅是bla-bla)如何使用launchctl实现上述(你的错误)automator解决方案? (3认同)
  • 请借我的借口.;)现在,是 - 这是最干净的解决方案,答案中最重要的部分是:**关键是这是一个特定于用户的启动条目,因此它将在登录时为给定用户运行.** (2认同)
  • 在我的情况下,在MacOS X El Capitan中加载了这个例子,但它没有启动脚本.我必须更改Program Key中的.plist文件,如:`<key> ProgramArguments </ key> <array> <string> /path/to/myscript.sh </ string> </ array>` (2认同)

jm666.. 345

按照这个:

  • 开始 Automator.app
  • 选择 Application
  • 单击Show library工具栏(如果隐藏)
  • 添加Run shell script(来自Actions/Utilities)
  • 将脚本复制并粘贴到窗口中
  • 测试一下
  • 保存在某个地方(例如你可以Applications在你的HOME中创建一个文件夹,你会得到一个your_name.app)

  • 转到System Preferences- > Accounts- >Login items

  • 添加此应用
  • 测试和完成;)

编辑:

我最近为这个答案赢得了一个"好回答"徽章.虽然我的解决方案很简单且有效,但在@ trisweb的回答中描述了在登录时运行任何程序或shell脚本的最简洁方法,除非您想要交互性.

使用automator解决方案,您可以执行下一步操作: automator screenshot登录应用程序

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

  • @GregMiernicki并且不要忘记,使用Automator解决方案,您可以制作交互式登录脚本 - 例如,一个会要求您输入某些条目的脚本(例如附加密码或类似内容).世界不仅是_black还是white_ - 至少,它就像一只斑马...... :) :) (4认同)
  • @GregMiernicki大声笑,早上好......;)差不多一年前我在答案中添加了一个编辑,在这里也说了.但是,对于普通用户来说这有点简单,因为创建XML(plist)文件对于许多用户来说不是非常用户友好.无论如何 - thanx评论.;) (2认同)
  • @Cupidvogel在登录时运行一个守护进程正是启动解决方案的工作 - 请参阅trisweb的回答.如果你可以管理一个python守护进程,你肯定可以管理plist配置文件,你可以在其中管理重启的所有方面,等等...... (2认同)
  • 指出另一个答案是最干净的荣誉。那应该得到一个好的公民徽章:)。 (2认同)

anubhava.. 37

  1. login.sh在$ HOME文件夹中一样创建shell脚本.

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

    做shell脚本"$ 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

  • @xgdgsc:哦好的,你检查过`〜/ Library/LaunchAgents`文件夹了吗? (2认同)

归档时间:

查看次数:

237976 次

最近记录:

1 年,2 月 前