2008-09-18 11 views
61

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?¿Cómo ejecuta un script al iniciar sesión en * nix?

+1

¿Qué nombre de usuario? UI de inicio de sesión? como gnome, GTK, Unity? Tal vez un nuevo inicio de shell de la tty? ¿Cual es la diferencia entre ellos? –

Respuesta

102

De wikipedia Bash

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

Cuando Bash se ejecuta un intérprete interactivo de ingreso , primero lee y ejecuta órdenes del archivo /etc/profile, si existe ese archivo. Después de leer ese archivo, busca ~/.bash_profile, ~/.bash_login y ~/.profile, en ese orden, y lee y ejecuta órdenes desde el primer que existe y es legible.

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

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

0

La secuencia de comandos ~/.bash_profile se ejecuta al iniciar sesión.

2

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

+1

En OS X con bash, ~/.bash_profile funciona bien. –

+2

Sí, pero ~/.profile ya existe. –

8

Al utilizar Bash, la primera de ~/.bash_profile, ~/.bash_login y ~/.profile se ejecutará para un intérprete interactivo de ingreso. Creo que ~/.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.

Me suelen poner todo lo que quiera siempre situado en .bashrc y luego ejecutarlo desde .bash_profile, donde también estableció algunas cosas que deben ejecutarse solamente cuando estoy acceder al sistema, tales como la creación de ssh-agent o correr screen.

3

Si desea ejecutar una guión y solamente una secuencia de comandos, se puede hacer que el shell por defecto 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 su seguro, así que no confiar en ella demasiado. Nada que ver con el establecimiento de su shell por defecto de ser un script que borra la unidad. ... aunque, .. Puedo imaginar un escenario en el que podría ser increíblemente útil)

1

Agregue una entrada en /etc/profile que ejecuta 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.

26

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

  • bash: .bash_profile, .bash_login, .profile (para atrás compabitibility)
  • sh: .profile
  • tcsh y csh: .login
  • zsh: .zshrc

usted probablemente puede averiguar lo que Shell está utilizando haciendo

echo $SHELL 

desde el aviso.

+1

echo $ 0 debería revelar qué shell se está utilizando, aunque de vez en cuando he visto 'sh' informado, cuando realmente es 'ksh', en HP-UX o Solaris, creo. –

0

Busque en la página del manual bash man 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 ARCHIVOS,

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

Añadir la secuencia de comandos en el archivo adecuado. Asegúrese de que el script esté en $ PATH, o use la ruta absoluta al archivo de script.

2

Launchd es un elemento launchd la forma preferida en OS X.

Si desea que se ejecute en el inicio de sesión ponerlo en ~/Library/LaunchAgents

inicio

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> 
2

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.

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

la solución sería:

  1. averiguar la ruta $ XDG_CONFIG_DIRS:

    echo $ XDG_CONFIG_DIRS

  2. poner su guión en ese directorio

Cuestiones relacionadas