web-dev-qa-db-fra.com

Comment lancez-vous un script lors de la connexion à * nix?

Je sais que je sais comment faire cela mais ... comment exécuter un script (bash est OK) lors de la connexion sous Unix?

68
Nate

De wikipedia Bash

Lorsque Bash démarre, il exécute les commandes dans divers scripts.

Lorsque Bash est appelé en tant que shell de connexion interactif, il lit et exécute d'abord les commandes du fichier/etc/profile, si ce fichier existe. Après avoir lu ce fichier, il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre, puis lit et exécute les commandes à partir de la première qui existe et est lisible.

Lorsqu'un shell de connexion se ferme, Bash lit et exécute les commandes du fichier ~/.bash_logout, s'il existe.

Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, Bash lit et exécute les commandes de ~/.bashrc, si ce fichier existe. Cela peut être inhibé en utilisant l'option --norc. L'option de fichier --rcfile forcera Bash à lire et à exécuter les commandes d'un fichier à la place de ~/.bashrc.

110
Svet

Lors de la connexion, la plupart des shells exécutent un script de connexion que vous pouvez utiliser pour exécuter votre script personnalisé. Le script de connexion exécuté par le shell dépend bien sûr de celui-ci:

  • bash: .bash_profile, .bash_login, .profile (pour la compatibilité en amont)
  • sh: .profile
  • tcsh et csh: .login
  • zsh: .zshrc

Vous pouvez probablement savoir ce que vous utilisez Shell en faisant

echo $Shell

de l'invite.

Pour une définition légèrement plus large de "login", il est utile de savoir que, dans la plupart des distributions, lorsque X sera lancé, votre fichier .xsessionrc sera exécuté lors du démarrage de votre session X.

27
pjz

Lors de l'utilisation de Bash, le premier de ~/.bash_profile, ~/.bash_login Et ~/.profile Sera exécuté pour un shell de connexion interactif. Je crois que ~/.profile Est généralement géré par des shells Unix en plus de Bash. Bash exécutera ~/.bashrc Pour un shell interactif sans connexion.

En règle générale, je place tout ce que je veux définir dans .bashrc, Puis je l'exécute à partir de .bash_profile, Où je configure également quelques éléments qui ne doivent s'exécuter que lorsque je me connecte, tels que up ssh-agent ou en cours d'exécution screen.

9
Michael Johnson

Si vous souhaitez exécuter le script n et le script niquement, vous pouvez faire en sorte que les utilisateurs utilisent Shell par défaut.

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

peut avoir des effets intéressants :) (ce n'est pas sûr, alors ne vous y fiez pas trop. rien de tel que de définir votre shell par défaut comme un script qui efface votre disque. ... bien que, pourrait être incroyablement utile)

5
Kent Fredric

J'ai été frustré par ce problème pendant des jours. Rien n'a fonctionné sur Ubuntu. Si je mets l’appel dans/etc/profile, tout s’est écrasé à la tentative de connexion. Je ne pouvais pas utiliser "Applications de démarrage" car ce n'était pas ce que je voulais. Cela définit uniquement le script pour cet utilisateur actuel.

Enfin, j'ai trouvé ce petit article: http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html

La solution serait:

  1. trouvez le chemin $ XDG_CONFIG_DIRS:

    echo $ XDG_CONFIG_DIRS

  2. mettez votre script dans ce répertoire

3
user568021

Placez-le dans votre profil bash :

~/.bash_profile
3
gbjbaanb

Si vous êtes sur OSX, alors c'est ~/.profile

3
Craig B.

Launchd est un moyen privilégié sous OS X.

Si vous voulez que cela fonctionne sur votre login, mettez-le dans ~/Library/LaunchAgents

Démarrer launchd item

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

Article d'arrêt

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

Exemple 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>
3
Milhous

Recherchez dans la page de manuel bash de votre système local ^ INVOCATION des informations sur le fichier à lire au démarrage.

man bash
/^INVOCATION

Toujours dans la section FILES,

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

Ajoutez votre script au bon fichier. Assurez-vous que le script se trouve dans $ PATH ou utilisez le chemin absolu du fichier de script.

2
jtimberman

Ajouter une entrée dans /etc/profile qui exécute le script. Ceci sera exécuté à chaque ouverture de session. Si vous ne le faites que pour votre propre compte, utilisez l’un de vos scripts de connexion (par exemple, .bash_profile) pour l'exécuter.

Le script ~/.bash_profile est exécuté lors de la connexion.

1
William Keller