sesion script inicio ejecutar crear como arrancar linux bash macos unix shell

linux - inicio - ¿Cómo se ejecuta un script al iniciar sesión en*nix?



script de inicio de sesion ubuntu (11)

Sé que una vez sé cómo hacer esto, pero ... ¿cómo se ejecuta un script (bash está bien) al iniciar sesión en Unix?


Agregue una entrada en /etc/profile que ejecute el script. Esto se ejecutará durante cada inicio de sesión. Si solo está haciendo esto para su propia cuenta, use uno de sus scripts de inicio de sesión (por ejemplo, .bash_profile ) para ejecutarlo.


Al iniciar sesión, la mayoría de las shells ejecutan un script de inicio de sesión, que puede usar para ejecutar su script personalizado. El script de inicio de sesión que ejecuta el shell depende, por supuesto, del shell:

  • bash: .bash_profile, .bash_login, .profile (para compatibilidad con versiones anteriores)
  • sh: .profile
  • tcsh y csh: .login
  • zsh: .zshrc

Probablemente puedas descubrir qué caparazón estás usando al hacer

echo $SHELL

del prompt.


Al usar Bash, se ejecutará el primero de ~/.bash_profile , ~/.bash_login y ~/.profile para un shell de inicio de sesión interactivo. Creo ~/.profile generalmente es ejecutado por shells de Unix además de Bash. Bash ejecutará ~/.bashrc para un shell interactivo que no sea de inicio de sesión.

Normalmente pongo todo lo que quiero establecer siempre en .bashrc y luego lo ejecuto desde .bash_profile , donde también configuro algunas cosas que deberían ejecutarse solo cuando estoy iniciando sesión, como configurar ssh-agent o ejecutar la screen .


Busque en la página del manual de bash de su sistema local ^ INVOCATION para obtener información sobre qué archivo se leerá al inicio.

man bash /^INVOCATION

También en la sección de ARCHIVOS,

~/.bash_profile The personal initialization file, executed for login shells ~/.bashrc The individual per-interactive-shell startup file

Agregue su secuencia de comandos al archivo correcto. Asegúrese de que el script esté en $ PATH, o use la ruta absoluta al archivo de script.



De wikipedia Bash

Cuando se inicia Bash, ejecuta los comandos en una variedad de scripts diferentes.

Cuando Bash se invoca como un shell de inicio de sesión interactivo, primero lee y ejecuta comandos desde el archivo / etc / profile, si ese archivo existe. Después de leer ese archivo, busca ~ / .bash_profile, ~ / .bash_login, y ~ / .profile, en ese orden, y lee y ejecuta comandos del primero que existe y que es legible.

Cuando sale un shell de inicio de sesión, Bash lee y ejecuta comandos del archivo ~ / .bash_logout, si existe.

Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, Bash lee y ejecuta comandos de ~ / .bashrc, si ese archivo existe. Esto puede inhibirse al usar la opción --norc. La opción de archivo --rcfile obligará a Bash a leer y ejecutar comandos desde el archivo en lugar de ~ / .bashrc.


El script ~/.bash_profile se ejecuta al iniciar sesión.


Estaba frustrado con este problema por días. Nada funcionó en ubuntu. Si puse la llamada en / etc / profile, todo se bloqueó al intentar iniciar sesión. No pude usar "Aplicaciones de inicio" porque eso no era lo que quería. Eso solo establece la secuencia de comandos para ese usuario actual.

Finalmente encontré este pequeño artículo: http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html

La solución sería:

  1. averigua la ruta $ XDG_CONFIG_DIRS:

    echo $ XDG_CONFIG_DIRS

  2. pon tu script en ese directorio


Si desea ejecutar una secuencia de comandos y solo una secuencia de comandos, puede hacerlo que el shell predeterminado de los usuarios.

echo "/usr/bin/uptime" >> /etc/shells vim /etc/passwd * username:x:uid:grp:message:homedir:/usr/bin/uptime

puede tener efectos interesantes :) (aunque no es seguro, no confíe demasiado en ello, nada como configurar el shell predeterminado para que sea un script que borre su disco ... aunque, ... me imagino un escenario donde eso podría ser increíblemente útil)


Si estás en OSX, entonces es ~/.profile


Launchd es la forma preferida en OS X.

Si desea que se ejecute en su inicio de sesión, colóquelo en ~/Library/LaunchAgents

Comience a launchd artículo

launchctl load /Library/LaunchDaemons/com.bob.plist

Detener elemento

launchctl unload /Library/LaunchDaemons/com.bob.plist

Ejemplo com.bob.plist

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.bob</string> <key>RunAtLoad</key> <true/> <key>ProgramArguments</key> <array> <string>/usr/bin/java</string> <string>-jar</string> <string>/Users/user/program.jar</string> </array> </dict> </plist>