我想知道有没有人能帮我让一个shell (.sh)程序在我登录电脑账户时自动运行。我使用的是Mac OS X 10.6.7。
我有一个名为“Example.sh”的文件,我希望在登录电脑时自动运行它。当我已经登录时,我没有问题运行它,但我希望它可以自动运行。
我想知道有没有人能帮我让一个shell (.sh)程序在我登录电脑账户时自动运行。我使用的是Mac OS X 10.6.7。
我有一个名为“Example.sh”的文件,我希望在登录电脑时自动运行它。当我已经登录时,我没有问题运行它,但我希望它可以自动运行。
按照以下步骤进行操作:
打开 Automator.app
选择 Application
在工具栏中点击 Show library
(如果隐藏)
添加 Run shell script
(位于 Actions/Utilities
下)
将您的脚本复制并粘贴到窗口中
测试一下
保存到某个地方(例如,可以在您的 HOME 中创建一个 Applications
文件夹,然后会得到一个 your_name.app
文件)
进入 系统偏好设置
-> 用户与群组
-> 登录项
(或者,系统偏好设置
-> 账户
-> 登录项
/ 取决于您的 MacOS 版本)
添加此应用程序
测试并完成 ;)
编辑:
我最近因为这个答案获得了“优秀答案”徽章。尽管我的解决方案简单且可行,但在登录时运行任何程序或 shell 脚本的最简洁方法由 @trisweb 的答案 描述,除非您需要交互性。
使用 Automator 解决方案可以做到以下事情:
简而言之:使用OSX的本地进程启动器和管理器launchd
。
要这样做,创建一个launchctl
守护程序。您可以完全控制脚本的所有方面,可以一次运行或保持活动状态作为守护程序。在大多数情况下,这是正确的方法。
.plist
文件。~/Library/LaunchAgents
中launchctl load [filename.plist]
手动运行)有关launchd
的更多信息,请参见维基百科文章,该文章非常好,并描述了该系统及其优点,以及与其他旧系统相比的优势。
以下是特定的plist文件,用于在登录时运行脚本。
已更新至2017年09月25日的OSX El Capitan和更新版本(感谢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>
在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
以获取错误信息。
关键是这是特定于用户的启动项,因此它将在给定用户登录时运行。系统特定的启动项(放置在/Library/LaunchDaemons
中)会在启动时运行。
如果您希望脚本在所有用户登录时运行,我认为LoginHook是您唯一的选择,并且这可能就是它存在的原因。
在您的$HOME文件夹中创建名为login.sh
的shell脚本。
将以下单行脚本粘贴到Script Editor中:do shell script "$HOME/login.sh"
然后将其保存为应用程序。
最后将该应用程序添加到您的登录项中。
如果您想要使脚本输出可见,可以使用以下步骤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
~/Library/LaunchAgents
文件夹吗? - anubhava