Je sais que je sais comment faire cela mais ... comment exécuter un script (bash est OK) lors de la connexion sous Unix?
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.
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:
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.
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
.
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)
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:
trouvez le chemin $ XDG_CONFIG_DIRS:
echo $ XDG_CONFIG_DIRS
mettez votre script dans ce répertoire
Placez-le dans votre profil bash :
~/.bash_profile
Si vous êtes sur OSX, alors c'est ~/.profile
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>
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.
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.