Ejecución de script al iniciar sesión en mac OS X [cerrado]
Me pregunto si alguien puede ayudarme a conseguir que un programa shell (.sh) se ejecute automáticamente cada vez que inicio sesión en mi cuenta en mi computadora. Estoy ejecutando Mac OS X 10.6.7.
Tengo un archivo "Example.sh" que quiero ejecutar cuando inicio sesión en mi computadora. No tengo problemas para ejecutarlo cuando ya estoy conectado, pero quiero que se ejecute automáticamente.
Sigue esto:
comenzar
Automator.app
seleccionar
Application
haga clic
Show library
en la barra de herramientas (si está oculta)agregar
Run shell script
(deActions/Utilities
)copia y pega tu script en la ventana
Pruébalo
guárdelo en algún lugar (por ejemplo, puede crear una
Applications
carpeta en su INICIO, obtendrá unyour_name.app
)vaya a
System Preferences
->Users & Groups
->Login items
(oSystem Preferences
->Accounts
->Login items
/ dependiendo de su versión de MacOS)agrega esta aplicación
prueba y listo ;)
EDITAR:
Recientemente obtuve una insignia de "Buena respuesta" por esta respuesta. Si bien mi solución es simple y funcional, la forma más limpia de ejecutar cualquier programa o script de shell al momento de iniciar sesión se describe en la respuesta de @trisweb , a menos que desee interactividad. .
Con la solución de automatización puedes hacer cosas como las siguientes:
por lo tanto, solicitar ejecutar un script o salir de la aplicación, solicitar contraseñas, ejecutar otros flujos de trabajo de Automator al momento de iniciar sesión, ejecutar aplicaciones condicionalmente al momento de iniciar sesión, etc.
tl;dr: utilice el iniciador y administrador de procesos nativos de OSX launchd
.
Para hacerlo, crea un launchctl
demonio. Tendrás control total sobre todos los aspectos del guión. Puedes ejecutar una vez o mantenerte vivo como un demonio. En la mayoría de los casos, este es el camino a seguir.
- Cree un
.plist
archivo de acuerdo con las instrucciones de los documentos de desarrollo de Apple aquí o con más detalles a continuación. - Colocar en
~/Library/LaunchAgents
- Inicie sesión (o ejecútelo manualmente a través de
launchctl load [filename.plist]
)
Para obtener más información launchd
, el artículo de Wikipedia es bastante bueno y describe el sistema y sus ventajas sobre otros sistemas más antiguos.
Aquí está el archivo plist específico para ejecutar un script al iniciar sesión .
Actualizado el 25/09/2017 para OSX El Capitan y versiones posteriores (crédito a 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>
Reemplace <string>
después de la clave Programa con el comando que desee (tenga en cuenta que cualquier script al que haga referencia ese comando debe ser ejecutable: chmod a+x /path/to/executable/script.sh
para garantizar que sea para todos los usuarios).
Guardar como~/Library/LaunchAgents/com.user.loginscript.plist
Ejecute launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
y cierre sesión/inicie sesión para probar (o para probar directamente, ejecute launchctl start com.user.loginscript
)
Cola /var/log/system.log
para mensajes de error.
La clave es que se trata de una entrada de inicio específica del usuario, por lo que se ejecutará al iniciar sesión para el usuario determinado. Los demonios de inicio específicos del sistema (ubicados en /Library/LaunchDaemons
) se ejecutan durante el arranque.
Si desea que se ejecute un script al iniciar sesión para todos los usuarios, creo que LoginHook es su única opción, y probablemente esa sea la razón por la que existe.
Cree un script de shell con el nombre como
login.sh
en su carpeta $HOME.Pegue el siguiente script de una línea en el Editor de scripts:
do shell script "$HOME/login.sh"
Luego guárdalo como una aplicación.
Finalmente agregue la aplicación a sus elementos de inicio de sesión.
Si desea que la salida del script sea visual, puede cambiar el paso 2 por esto:
tell application "Terminal"
activate
do script "$HOME/login.sh"
end tell
Si se necesitan varios comandos, se puede utilizar algo como esto:
tell application "Terminal"
activate
do script "cd $HOME"
do script "./login.sh" in window 1
end tell