#1 Le 24/01/2013, à 09:33
- tintinux
[Résolu] Comment lancer une commande bash au login
Bonjour
Je n'arrive pas à retrouver comment lancer un script bash après connection d'un utilisateur donné sur un serveur.
Ce sera un petit menu qui affiche des options, demande un choix et exécute une commande, ou revient au prompt.
Merci pour votre aide.
Dernière modification par tintinux (Le 25/01/2013, à 09:19)
Ubuntu-MATE 22.04 sur 5 machines de la famille.
Développeur d'applications, dont Gestinux, une compta-gestion libre, multi-plateforme et multi-langues, connectable à une base MySQL, MariaDb ou PostgreSQL, locale ou distante.
Hors ligne
#2 Le 24/01/2013, à 12:23
- louis94
Re : [Résolu] Comment lancer une commande bash au login
Bonjour,
Il suffit normalement d'ajouter la commande à lançer tout en bas d'un fichier caché nommé « .bashrc » dans le dossier personnel de l'utilisateur.
Louis
Hors ligne
#3 Le 24/01/2013, à 12:38
- tintinux
Re : [Résolu] Comment lancer une commande bash au login
Merci pour la réponse, mais j'ai essayé, sans succès.
Le fichier .bashrc n'existait pas dans mon dossier personnel, même en affichant les fichiers cachés bien sûr.
Je l'ai créé et lui ai donné droit d'exécution.
J'ai mis dedans :
#!/bin/bash
echo "bonjour !"
Mais je ne vois rien s'afficher au login...
Qu'est ce qui cloche ?
Ubuntu-MATE 22.04 sur 5 machines de la famille.
Développeur d'applications, dont Gestinux, une compta-gestion libre, multi-plateforme et multi-langues, connectable à une base MySQL, MariaDb ou PostgreSQL, locale ou distante.
Hors ligne
#4 Le 24/01/2013, à 15:23
- louis94
Re : [Résolu] Comment lancer une commande bash au login
Mon fichier à moi n'est pas exécutable et il fonctionne... Quand j'ajoute :
echo "Bonjour"
à la fin du fichier, il m'affiche bien « Bonjour ».
Est-ce que tu utilises bien Bash ? Essaye
echo $SHELL
pour le vérifier.
Louis
NB:
Bash 4.2.37 sur Kubuntu 12.10.
Hors ligne
#5 Le 24/01/2013, à 15:38
- tintinux
Re : [Résolu] Comment lancer une commande bash au login
echo $SHELL
me retourne /bin/sh
Que veut dire "J'utilise bash", ou comment fais-je pour l'utiliser ?
Mes scripts sont généralement écrits pour lui, avec la ligne #!/bin/bash pour commencer, et fonctionnent normalement une fois que je suis connecté.
Ubuntu-MATE 22.04 sur 5 machines de la famille.
Développeur d'applications, dont Gestinux, une compta-gestion libre, multi-plateforme et multi-langues, connectable à une base MySQL, MariaDb ou PostgreSQL, locale ou distante.
Hors ligne
#6 Le 24/01/2013, à 15:54
- louis94
Re : [Résolu] Comment lancer une commande bash au login
sh ne va pas chercher le même fichier que bash au démarrage (et je ne sais pas même s'il va en chercher un).
Il est possible que ton émulateur de terminal utilise un autre interpréteur. Va voir dans la configuration de celui-ci. S'il y a un endroit où il est indiqué « /bin/sh », modifie-le par « /bin/bash ».
Sinon, c'est que ton interpréteur par défaut est « mal » configuré. Pour en changer et utiliser bash, entre la commande
usermod -s /bin/bash TOI
Normalement, tous les utilisateurs utilisent Bash par défaut... tu as dû en changer par inadvertence.
Louis
Hors ligne
#7 Le 24/01/2013, à 16:21
- tintinux
Re : [Résolu] Comment lancer une commande bash au login
Bon j'ai fait
usermod -s /bin/bash MOI
et désormais
echo $SHELL
me retourne /bin/bash
Mais ça ne change rien, toujours rien ne s'affiche.
Le serveur (OVH) affiche des informations système à chaque login. Est-ce qu'un autre fichier que .bashrc ne serait pas appelé à la place ?
En fouillant j'ai trouvé que le fichier /etc/profile a été rempli (sûrement par OVH) avec ça :
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
Je ne comprends pas trop pourquoi la ligne
. /etc/bash.bashrc
commence par un point et un espace.
En renommant /etc/.bashrc en /etc/bash.bashrc rien de plus ne se passe...
Merci pour toute suggestion...
Tintinux
Ubuntu-MATE 22.04 sur 5 machines de la famille.
Développeur d'applications, dont Gestinux, une compta-gestion libre, multi-plateforme et multi-langues, connectable à une base MySQL, MariaDb ou PostgreSQL, locale ou distante.
Hors ligne
#8 Le 24/01/2013, à 21:20
- Sciensous
Re : [Résolu] Comment lancer une commande bash au login
/!\ le point d'exclamation est interprété en bash (et sh) donc,
soit
#!/bin/bash
echo 'bonjour !'
soit
#!/bin/bash
echo "bonjour"
à verifier
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#9 Le 24/01/2013, à 22:47
- xavier4811
Re : [Résolu] Comment lancer une commande bash au login
Bonsoir,
Je ne comprends pas trop pourquoi la ligne
. /etc/bash.bashrc
commence par un point et un espace.
./monscript.sh
monscript.sh est exécuté dans un sous-shell, les variables, fonctions,... sont détruites a la fin de l'exécution.
. ./monscript.sh
monscript.sh est exécuté dans le shell courant, son contenu est accessible a la fin de l'exécution. C'est ce qu'on appelle le dot-sourcing.
$ cat test.sh
#!/bin/bash
a="Bonjour !"
$ ./test.sh
$ echo $a
$ . ./test.sh
$ echo $a
Bonjour !
Hors ligne
#10 Le 24/01/2013, à 22:58
- louis94
Re : [Résolu] Comment lancer une commande bash au login
J'ai le même /etc/profile que toi, c'est celui qui vient avec le système.
J'ai encore une idée qui pourrait marcher : ajouter
$HOME/.bashrc
à la fin de /etc/profile, et rendre le .bashrc exécutable.
@Sciensous : J'ai vérifié les deux versions dans mon .bashrc, elles se comportent de la même manière (elles affichent "Bonjour !"). Par contre, en les entrant manuellement, la deuxièms me renvoie une erreur...
Hors ligne
#11 Le 25/01/2013, à 09:17
- tintinux
Re : [Résolu] Comment lancer une commande bash au login
Merci à tous pour vos différentes précisions utiles.
Il fallait effectivement modifier /etc/profile pour qu'il appelle .bashrc, sinon ce n'était pas fait.
J'ai donc ajouté à la fin :
# lancement auto
if [ -f .bashrc ]; then
. ./.bashrc
fi
Tintinux
Ubuntu-MATE 22.04 sur 5 machines de la famille.
Développeur d'applications, dont Gestinux, une compta-gestion libre, multi-plateforme et multi-langues, connectable à une base MySQL, MariaDb ou PostgreSQL, locale ou distante.
Hors ligne