在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,你可以做下一件事情:
因此,要求运行脚本或退出应用程序,询问密码,在login时运行其他自动工作stream程,在login时有条件地运行应用程序等等。
tl; dr:使用OSX的本地进程启动器和pipe理器, launchd
。
为此,请创build一个launchctl
守护进程。 您将完全控制脚本的各个方面。 你可以运行一次或保持作为守护进程。 在大多数情况下,这是要走的路。
- 根据下面的Apple Dev文档中的说明创build一个
.plist
文件。 - 放置在
~/Library/LaunchAgents
- 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,这可能是它存在的原因。
-
在您的$ HOME文件夹中创build您的shell脚本作为
login.sh
。 -
将以下一行脚本粘贴到脚本编辑器中:
做shell脚本“$ HOME / login.sh”
-
然后将其保存为应用程序。
-
最后将该应用程序添加到您的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