我想知道是否有人能够帮助我得到一个shell (.sh)程序自动运行每当我登录到我的帐户在我的电脑上。我运行的是Mac OS X 10.6.7。
我有一个文件quot;Example.sh"我想在登录电脑时运行的程序。当我已经登录时,运行它没有问题,但我想让它自动运行。
login.sh
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
遵循这个:
Automator.app
Application
点击工具栏中的Show library(如果隐藏)
Show library
Run shell script
Actions/Utilities
保存在某个地方(例如,你可以在你的HOME中创建一个Applications文件夹,你会得到一个your_name.app)
Applications
your_name.app
go to System Preferences ->Users & Groups→Login items(或System Preferences ->Accounts→Login items /取决于你的MacOS版本)
System Preferences
Users & Groups
Login items
Accounts
添加这个应用
编辑:
我最近获得了一个“好答案”;这是我的答案。虽然我的解决方案简单有效,但在登录时运行任何程序或shell脚本的最干净的方法描述在@trisweb的答案 除非你想要互动性。
因此,要求运行脚本或退出应用程序,询问密码,在登录时运行其他自动工作流程,在登录时有条件地运行应用程序等等……
使用OSX的本机进程启动器和管理器launchd。
launchd
为此,创建一个launchctl守护进程。您将完全控制脚本的各个方面。您可以运行一次,也可以作为守护进程继续运行。在大多数情况下,这是正确的方法。
launchctl
.plist
~/Library/LaunchAgents
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以确保它适用于所有用户)。
<string>
chmod a+x /path/to/executable/script.sh
保存为~/Library/LaunchAgents/com.user.loginscript.plist
~/Library/LaunchAgents/com.user.loginscript.plist
运行launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist并注销/登录测试(或直接运行launchctl start com.user.loginscript进行测试)
launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
launchctl start com.user.loginscript
尾部/var/log/system.log为错误消息。
/var/log/system.log
关键是这是一个特定于用户的launchd条目,因此它将在给定用户登录时运行。特定于系统的启动守护进程(放置在/Library/LaunchDaemons中)在引导时运行。
/Library/LaunchDaemons
如果您想要一个脚本在所有用户登录时运行,我相信LoginHook是您唯一的选择,这可能是它存在的原因。