我想知道在我登录计算机上的帐户时是否有人可以帮助我运行.sh文件。我正在运行Mac OS X 10.6.7。
我有一个要登录到计算机时要运行的文件“ Example.sh”。我已经登录后运行它没有问题,但是我希望它可以自动运行。
人们说要将其添加到登录外壳文件中,但我不知道它在哪里。请帮忙。
我想知道在我登录计算机上的帐户时是否有人可以帮助我运行.sh文件。我正在运行Mac OS X 10.6.7。
我有一个要登录到计算机时要运行的文件“ Example.sh”。我已经登录后运行它没有问题,但是我希望它可以自动运行。
人们说要将其添加到登录外壳文件中,但我不知道它在哪里。请帮忙。
Answers:
请遵循以下步骤:
Automator.app
Application
Show library
在工具栏中单击(如果隐藏)Run shell script
(来自Actions/Utilities
)保存在某处(例如,您可以Applications
在HOME中创建一个文件夹,您将获得your_name.app
)
转到System Preferences
-> Accounts
->Login items
编辑:
我最近为此答案赢得了“良好答案”徽章。尽管我的解决方案既简单又有效,但是@trisweb的答案中描述了在登录时运行任何程序或Shell脚本的最简洁方法,除非您需要交互性。
使用自动解决方案,您可以执行以下操作:
因此,要求运行脚本或退出应用程序,询问密码,在登录时运行其他自动化程序工作流,在登录时有条件地运行应用程序,依此类推...
tl; dr:使用OSX的本机进程启动器和管理器launchd
。
为此,创建一个launchctl
守护进程。您将完全控制脚本的各个方面。您可以运行一次,也可以作为守护程序运行。在大多数情况下,这是要走的路。
.plist
根据此处的Apple Dev文档中的说明或下面的更多详细信息创建文件。~/Library/LaunchAgents
launchctl load [filename.plist]
)有关更多信息launchd
,Wikipedia文章相当不错,描述了该系统及其相对于其他旧系统的优势。
这是在登录时运行脚本的特定plist文件。
OSX El Capitan和更新版本(于2017年9月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>
用<string>
所需的命令替换Program密钥后的(注意,该命令引用的任何脚本都必须是可执行的: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是您唯一的选择,这可能就是它存在的原因。
launchctl
在大多数情况下它要好得多,并且可以让您更好地控制运行脚本的所有方面。它更多的是“为什么存在启动时为什么使用功能较弱的方法?” (请注意,我已经更改了第一句话,以表示我个人不建议在这种情况下使用它们)。
login.sh
在$ HOME文件夹中创建外壳脚本。
将以下单行脚本粘贴到“脚本编辑器”中:
做shell脚本“ $ 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
Go to System Preferences -> Accounts -> Login items
并选中此应用程序的隐藏框。
~/Library/LaunchAgents
文件夹了吗?