Ejecución de script al iniciar sesión en mac OS X [cerrado]

Resuelto MZimmerman6 asked hace 13 años • 3 respuestas

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.

MZimmerman6 avatar Jun 22 '11 22:06 MZimmerman6
Aceptado

Sigue esto:

  • comenzarAutomator.app

  • seleccionarApplication

  • haga clic Show libraryen la barra de herramientas (si está oculta)

  • agregar Run shell script(de Actions/Utilities)

  • copia y pega tu script en la ventana

  • Pruébalo

  • guárdelo en algún lugar (por ejemplo, puede crear una Applicationscarpeta en su INICIO, obtendrá un your_name.app)

  • vaya a System Preferences-> Users & Groups-> Login items(o System 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: aplicación de inicio de sesión de captura de pantalla de Automator

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.

clt60 avatar Jun 22 '2011 19:06 clt60

tl;dr: utilice el iniciador y administrador de procesos nativos de OSX launchd.

Para hacerlo, crea un launchctldemonio. 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.

  1. Cree un .plistarchivo de acuerdo con las instrucciones de los documentos de desarrollo de Apple aquí o con más detalles a continuación.
  2. Colocar en~/Library/LaunchAgents
  3. 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.shpara garantizar que sea para todos los usuarios).

Guardar como~/Library/LaunchAgents/com.user.loginscript.plist

Ejecute launchctl load ~/Library/LaunchAgents/com.user.loginscript.plisty cierre sesión/inicie sesión para probar (o para probar directamente, ejecute launchctl start com.user.loginscript)

Cola /var/log/system.logpara 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.

trisweb avatar Nov 14 '2012 03:11 trisweb
  1. Cree un script de shell con el nombre como login.shen su carpeta $HOME.

  2. Pegue el siguiente script de una línea en el Editor de scripts:do shell script "$HOME/login.sh"

  3. Luego guárdalo como una aplicación.

  4. 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
anubhava avatar Jun 22 '2011 17:06 anubhava