dr: use o iniciador e gerenciador de processos nativo do OSX launchd,.
Para fazer isso, faça um launchctldaemon. Você terá controle total sobre todos os aspectos do script. Você pode executar uma vez ou manter-se vivo como um daemon. Na maioria dos casos, este é o caminho a percorrer.
- Crie um
.plistarquivo de acordo com as instruções nos documentos do Apple Dev aqui ou com mais detalhes abaixo.
- Colocar em
~/Library/LaunchAgents
- Faça login (ou execute manualmente via
launchctl load [filename.plist])
Para mais informações launchd, o artigo da Wikipedia é bastante bom e descreve o sistema e suas vantagens sobre outros sistemas mais antigos.
Aqui está o arquivo plist específico para executar um script no login .
Atualizado 25/09/2017 para OSX El Capitan e mais recente (crédito para 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>
Substitua a <string>chave depois do programa pelo comando desejado (observe que qualquer script referenciado por esse comando deve ser executável: chmod a+x /path/to/executable/script.shpara garantir que seja para todos os usuários).
Salvar como ~/Library/LaunchAgents/com.user.loginscript.plist
Execute launchctl load ~/Library/LaunchAgents/com.user.loginscript.pliste efetue logout / logon para testar (ou testar diretamente, executar launchctl start com.user.loginscript)
Cauda /var/log/system.logpara mensagens de erro.
A chave é que essa é uma entrada launchd específica do usuário, portanto ela será executada no login do usuário especificado. Daemons de inicialização específicos do sistema (colocados em /Library/LaunchDaemons) são executados na inicialização.
Se você deseja que um script seja executado no login para todos os usuários, acredito que o LoginHook é sua única opção, e provavelmente é por isso que existe.