Script /etc/profile.d/rvm.sh à l'ouverture d'une fenêtre Ter

Bonjour,

Je suis en train de me monter un serveur web Apache et j’installe RVM (Ruby Version Manager).
Le processus d’installation est assez usine à gaz (des fois je me demande pourquoi les gens s’évertuent à dire ce qu’il ne faut pas faire, au lieu de simple lister les choses à faire pour chaque cas) mais enfin en lisant et relisant différent tuto dont le officiel, je crois avoir fait juste pour une installation Multi-users.

L’installation crèe un script rvm.sh dans le dossier /etc/profile.d/ qui est exécute la commande “source” afin de charger RVM en mémoire.
Genre : source "/usr/local/rvm/scripts/rvm"

Premier problème
Le problème c’est que lorsque j’ouvre une fenêtre Terminal (en mode utilisateur de base) depuis ma Debian 6.0.5, le script /etc/profile.d/rvm.sh n’est pas exécuté.
J’ai ajouté une commande “touch /home/toto/test1.txt” dans le script => aucun fichier créé.

Deuxième problème
Lorsque j’exécute le fichier /etc/profile.d/rvm.sh à la mano en ligne de commande, il s’exécute (le fichier test1.txt est créé),
mais la commande source “/usr/local/rvm/scripts/rvm” ne semble pas s’exécuter ???
Car si je tape ensuite rvm le shell répond : bash: rvm: commande introuvable

Pourtant j’ai ajouté des “echo” dans le script pour vérifier, et le script entre dans les bonnes branches de condition “IF”.

Enfin, lorsque j’exécute en ligne de commande dans le terminal la commande source "/usr/local/rvm/scripts/rvm" ça fonctionne.
Car si je tape ensuite rvm le shell réagit correctement en m’affichant toutes l’aide et les infos de version.

Quelqu’un a-t-il une idée sur la cause de ces problèmes ?

D’avance merci

Bon, ce qui peut paraître évident sur une machine sans interface graphique, l’est beaucoup mois avec une interface graphique.
Le pire c’est quand le français contribue à rendre l’informatique incompréhensible… :whistle: (celle là sera de moi :stuck_out_tongue:)

[i]J’ai fouillé les manuels sur bash, mais je ne voyais rien qui puisse expliquer ce comportement (ou plutôt je ne comprenais pas tout ce qui y était expliqué, pour être honnête).
Puis j’ai googlisé à mort les fenêtres terminal et /etc/profile, rien qui me mette sur une piste.

Puis, je me suis dis, c’est pas possible, y a un truc qui m’échappe ! Partout, les bouquins, les tutos expliquent que le script /etc/profile s’exécute à chaque lancement d’un shell, et qu’à l’intérieur une boucle exécute tous les scripts contenus dans /etc/profile.d/.[/i]

Alors j’ai fouillé dans l’interface graphique.
Dont notamment le menu : Edition > Préférences du profil de la fenêtre du Terminal.

C’est là que j’ai découvert dans l’onglet “Titre et commande”, un obscure et incompréhensible paramètre (certainement ajouté par la magie de Cthulhu ^^) :

:115 Lancer la commande en tant que shell de connexion :115

Là ça m’a fait tilt :115 : attend, il me semble avoir vu un truc similaire dans le manuel du bash. Enfin, quand je dis similaire, il y avait que le mot “connexion” qui était similaire. Quoi que le mot “shell” m’évoquait le “bash”… et mes neurones me connectaient par association à “man bash” va savoir pourquoi… :119 Enfin bref !

Extrait du “man bash” :

[quote]…
INVOCATION

Un shell est dit de login si le premier caractère de son argument numéro zéro est un -, ou s’il est invoqué avec l’option -login.

Un shell est interactif si son entrée standard et sa sortie standard sont toutes deux connectées à un terminal (déterminé par la fonction isatty(3)), ou s’il est invoqué avec l’option -i. Le paramètre PS1 est positionné, et le paramètre $- contient la lettre i si bash est interactif, ce qui permet à un script ou à un fichier de démarrage de vérifier l’état du shell.

Le paragraphe suivant décrit comment bash exécute ses fichiers d’initialisation. Si l’un de ces fichiers existe mais n’est pas accessible en lecture, bash signale une erreur. Les tildes sont remplacées par des noms de fichiers comme décrit dans le paragraphe Développement du Tilde de la section Développement.

Lorsque bash est lancé comme shell de login interactif, ou comme shell non-interactif avec l’option --login, il lit et exécute tout d’abord les commandes se trouvant dans le fichier /etc/profile s’il existe. Après lecture de ce fichier, il recherche ~/.bash_profile, ~/.bash_login, et ~/.profile, dans cet ordre, et exécute les commande se trouvant dans le premier fichier existant et accessible en lecture. L’option --noprofile peut être utilisée au démarrage du shell pour empêcher ce comportement.

Lorsqu’un shell de login se termine, bash lit et exécute les commandes du fichier ~/.bash_logout, s’il existe.

Quand un shell interactif démarre sans être un shell de login, bash lit et exécute les commandes se trouvant dans ~/.bashrc s’il existe. Ce comportement peut être inhibé à l’aide de l’option --norc. L’option --rcfile fichier forcera bash à exécuter les commandes dans fichier plutôt que dans ~/.bashrc.

… bla bla bla … [/quote]

La deuxième phrase en gras est fort sympatique :imp: , faut comprendre le sous-entendu : Si ce n’est pas un shell interactif il n’exécutera QUE les commandes se trouvant SEULEMENT dans ~/.bashrc.
Pas mal ! Faut dire que le titre “INVOCATION” fait assez penser à du Cthulhu ou du Stormbringer, enfin c’est selon… :119

Pour ceux qui ont de la peine à trouver le dico de Linux, vous affolez pas c’est normal, il y a un mélange de francais-anglais-informatisé que je raccourcirai par infroglais… :laughing:

Shell de connexion = Shell de login
Lancement de la commande = Lorsque bash est lancé = Quand un shell interactif démarre : et se résume aussi plus simplement par “Ouvrir une fenêtre de Terminal”
:unamused:

Ce qui veut dire que comme cette fameuse option n’était pas cochée (installation par défaut de Debian), ma fenêtre terminal n’était pas considérée comme un shell de login, et donc le script /etc/profile n’était pas excuté, et par voie de conséquence ceux contenus dans /etc/profile.d/ n’étaient pas exécutés.

Dès lors que cette option était cochée, mon script s’exécutait. Ce qui résolu mon premier problème.
Comme, je suppose (et j’ai pas envie de perdre plus de temps à chercher pourquoi) il devait y a avoir des variables d’environnement non-initialisées par /etc/profile et que rvm.sh utilise dans ses testes de condition, ce qui résolu également mon second problème.
(Notamment une instruction : true ${rvm_path:="/usr/local/rvm"} ,à laquelle je ne comprends rien)

Résumé

Pour que ça marche, il faut cocher l’optionLancer la commande en tant que shell de connexion” dans l’onglet “Titre et commande” du menu “Edition > Préférences du profil” dans la fenêtre du Terminal que vous trouverez en cliquant sur le menu Application > Accessoires > Terminal de la barre Debian en haut de l’écran. Pfiouuu :whistle:

Vous comprenez pas ? Ah mince j’aurais du commencer par la fin de la phrase. Bref l’écrire en anglais. Décidément cette histoire de infroglais ne nous lache pas, ^^
C’est comme Rexona… euh bon j’arrête ici.
Mais pour ceux qui ont juste lu le paragraphe “Résumé”, si vous désirez comprendre pourquoi, ben faut tout lire depuis le début mes coquins.

Non, mais pourquoi je me décarcasse moa hein ? :wink:

[quote]Faut dire que le titre “INVOCATION” fait assez penser à du Cthulhu ou du Stormbringer, enfin c’est selon…[/quote] :038

Merci du retour en tous cas! :wink: