Journal la variable d'environnement PATH

Posté par  .
Étiquettes : aucune
0
22
sept.
2004
Bonjour,
C'est très compliqué de modifier comme on le souhaite cette variable.
Je souhaite pouvoir la modifier "à chaud" (sans reboot ni relancer le serveur graphique) pour que les modifications soient valable pour toute application que je lance dans mon environnement graphique, or:
- si je modifie le fichier ~/.bash_profile, les changements ne se font que lorsque je lance un terminal et uniquement dans ce terminal
- si je modifie le fichier /etc/profile, il faut rebooter (et en plus ça sera valable pour TOUS les utilisateurs)

Quelqu'un aurait-il une solution ? (indépendante de la distribution si possible ;-))
  • # Apprendre Unix ?

    Posté par  . Évalué à 10.

    Désolé, c'était trop facile.

    Ta question c'est : "comment créer une variable d'environnement de manière à ce que les applis déja lancées puissent y accéder ?".

    La réponse est : "C'est pas possible directement." (ou alors faut m'expliquer). Quand tu lances un processus, il récupère l'environnement de son père, donc (entre autres) les variables exportées. Après coup, il ne peut plus récupérer celles déclarées après. Mais il peut créer ses propres varialbes et les exporter à ses fils. C'est vrai qu'on pourrait envisager de créer des variables dans le lanceur de KDE par exemple (un peu comme les propriétés de Windows) et que tous les programmes lancés par la suite puissent y accéder. Mais pour les programmes déja lancés se serait pas possible.

    Par contre, tu peux placer tes variables (et les exporter) dans ton .bash_profile, faire dans une console déja ouverte . .bash_profile ce qui va avoir pour effet d'incorporer tout le contenu dans l'environnement courant (celui du shell). Si depuis ce shell tu lances ensuite un autre processus, alors il aura accès au contenu de tes nouvelles variables exportées.

    Ne pas oublier aussi que comme l'environnement est dupliqué, on obtient une copie de la valeur de la variable. Dans le fils, si tu modifie sa valeur, ce n'est pas répercuté chez le père (ou les autres)...
    • [^] # Re: Apprendre Unix ?

      Posté par  . Évalué à 1.

      >Ta question c'est : "comment créer une variable d'environnement de manière à ce que les applis déja lancées puissent y accéder ?".

      Non, je ne demande pas tout ça quand même, juste que les prochaines que je lancerai tiennent compte des modification du PATH.

      >Si depuis ce shell tu lances ensuite un autre processus, alors il aura accès au contenu de tes nouvelles variables exportées.

      Oui, je sais bien, mais je cherchais justement une autre solution "à la Windows".
  • # man source

    Posté par  (site web personnel) . Évalué à 5.

    Relecture d'un fichier de conf

    source ~/.bash_profile
    source /etc/profile

    Modif temporaire (ne reste pas apres le logout)

    export PATH=$PATH:/nouveauRepertoire1:/nouveauRepertoire2
  • # Les variables d'environnement.

    Posté par  . Évalué à 5.

    sous TCSH
    $ setenv VARIABLE CONTENU

    sous BASH
    $ VARIABLE=CONTENU pour créer une variable

    $ export VARIABLE=CONTENU pour créer une variable d'environnement qui sera propagée à tous les processus fils.

    $ source MonScriptShell ou
    $ . MonScriptShell pour faire réinterpréter ton fichier par le shell courant et pas l'exécuter dans un sous-shell (le point isolé à la place d'une commande est un synonyme de "source").

    si je modifie le fichier /etc/profile, il faut rebooter (et en plus ça sera valable pour TOUS les utilisateurs)

    On ne reboote jamais sous Unix. Le seul moment où tu as besoin de le faire, c'est quand tu changes de noyau. Il faut perdre cette mauvaise habitude qui nous vient de Windows. On ne redémarre pas un système pour l'hygiène. Si tu en arrives là, il y a 99% de chances que tu t'y prennes mal.

    Désolé d'être aussi cru, mais il faut battre le fer tant qu'il est chaud ! :-)

    Pour tes variables d'environnement, le seul problème que tu puisse avoir est que tous tes processus sont lancés depuis celui qui a ouvert ta session, donc c'est lui qui faut réinitialiser. Par conséquent:

    1) Fais tes modifs
    2) Délogue-toi.
    3) Relogue-toi.

    Et voila, tout sera rentré dans l'ordre. Ou alors, fais comme tout le monde, lance tes programmes depuis des terminaux :-)

    Bon courage ...
    • [^] # Re: Les variables d'environnement.

      Posté par  . Évalué à 5.

      Je crois effectivement que son problème c'est pour les variables de sa session X, et c'est vrai que c'est galère de redémarrer son serveur juste pour des variables.

      Du coup, ta solution d'utiliser un terminal pour lancer les applis est la meilleure à mon avis, en tout cas tant que les variables ne sont pas bien définies.

      Pour ma part, j'ai commencé un script Ruby permettant de gérer de façon assez simple ses variables d'environnements et alias dans ses terminaux.

      Par contre, ce n'est pas encore utilisable en l'état mais j'y travaille, l'ébauche de mon script se trouve ici : http://gast.sourceforge.net/envi.php(...) . Pour l'instant il supporte les de type sh et csh.

      Voila, je ferais un journal pour indiquer quand le script sera terminé.
      • [^] # Re: Les variables d'environnement.

        Posté par  . Évalué à 1.

        Je crois effectivement que son problème c'est pour les variables de sa session X, et c'est vrai que c'est galère de redémarrer son serveur juste pour des variables.

        C'est bel et bien mon problème.
        Mais faire un source /etc/profile ne me convient pas car ça sous-entend qu'il faut d'abord le modifier pour ajouter les nouveaux chemins du PATH et ça veut dire qu'il faut passer en root.

        Je cherche une solution en mode utilisateur avec au pire un redémarage du serveur graphique, mais quand même pas de la machine.
    • [^] # Re: Les variables d'environnement.

      Posté par  . Évalué à 2.

      «On ne reboote jamais sous Unix. Le seul moment où tu as besoin de le faire, c'est quand tu changes de noyau»

      Ah bon? et comment on fait pour réactualiser la table des partitions (/proc/partitions) sans rebooter?
      • [^] # Re: Les variables d'environnement.

        Posté par  (site web personnel) . Évalué à 4.

        On démonte tout, on fait l'appel système adéquat, et on remonte :p
        • [^] # Re: Les variables d'environnement.

          Posté par  . Évalué à 4.

          > man adéquat
          No manual entry for adéquat

          Heu, tu n'en serais pas au kernel 3.2, toi? ;^)
          • [^] # Re: Les variables d'environnement.

            Posté par  (site web personnel) . Évalué à 2.

            Ecoute, jai 3 hdd sur mon ordi, et je sais de quoi je parle....

            1° tu démonte TOUT ce qui est monté sur le hdd dont tu veux modifier la table de partition
            2° tu lance fdisk, tu fais tes modifications, tu quittes en les lui faisant écrire
            3° si rien n'est monté sur le hdd en question, il va faire un appel à sys_rereadIOjesais plus quoi, qui fait relire la table des partitions au kernel.
            4° tu remontes tout ce dont tu as besoin

            Le tour est joué...
            • [^] # Re: Les variables d'environnement.

              Posté par  . Évalué à 2.

              Je veux bien le croire! Je voulais juste dire que ton explication n'était pas très explicite... je veux dire par là que si il y avait une commande à taper dans un shell ça m'arrangerait quelque peu. Ça m'étonnerait qu'un appel système en c puisse le faire mais qu'aucune commande ne l'implémente. D'ailleurs je viens de faire un "grep sys_reread" dans les sources du kernel mais je n'ai rien trouvé :-(

              À moins qu'il n'y aie que fdisk qui le fasse dans la situation particulièr que tu décris?

              Je suppose aussi que la manip n'est pas faisable si la partition / est sur le disque que l'on traficote?

              Enfin, ça ne me dérangerait vraiment pas d'avoir tord sur ce coup là car ça reste quand même lourd de rebooter à chaque coup de fdsik!
              • [^] # Re: Les variables d'environnement.

                Posté par  (site web personnel) . Évalué à 2.

                Tu as tord, on peut forcer le kernel a reloader la table des partitions, mais pour cela il faut qu'aucune partition du disque en question en soit monter.


                Pour répondre a ta question, on peut aussi démonter /, mais c'est le bordel le plus complet...

                Enfin bref, en un mot c'est possible, mais bien plus simple de rebooter dans ce cas la.
                En meme temps je touche très rarement ma table de partition personellement :p

                PS : après avoir essayé, c'est un appel particulier de ioctl() qui permet de relire la table des partitions...

                $ apropos partition
                cfdisk (8) - Curses based disk partition table manipulator for Linux
                fdisk (8) - Partition table manipulator for Linux
                partprobe (8) - inform the OS of partition table changes
                sfdisk (8) - Partition table manipulator for Linux

                Voila, jéspère qu'en lisant ces page de man tu pourra en apprendre plus, Personellement le sujet ne m'intéresse pas énormément, je savais juste que c'était possible pour l'avoir deja fait...
  • # CMT

    Posté par  . Évalué à 2.

    Bon je joue au representant de commerce, mais j'arriverai bien a le fourguer "mon" programme :) (cf mes posts precedents).

    CMT [1], peut configurer, independament du shell, les variables d'environnement que tu veux.
    Tout ceci se fait via un bete fichier texte que cmt va lire.
    CMT va ensuite generer les fichiers [c]sh necessaires a tes besoins que tu pourras ensuite 'sourcer'.

    Les collaborations de physiciens de particules s'en servent pour :
    - la gestion des variables d'environnement de leur parc informatique (pour le moins heterogene : il est mondial ;)
    - la gestion de projets d'envergure ( creation de makefile, bindings pour CVS, tests de regression, etc... )

    Le tout sous licence CeCILL. Donc a priori compatible GPL.

    [1] : http://www.cmtsite.org(...)
  • # ~/.profile

    Posté par  . Évalué à 3.

    Et pourquoi n'utilises-tu pas le ~/.profile ? C'est l'équivalent de /etc/profile mais pour l'utilisateur seulement.

    Tes variables seront prises en compte juste après un logout / logon, pas besoin de reboot.

    Et si c'est pour tester, ben reste dans un terminal jusqu'à ce que tu aies fini les tests. Y'a pas moyen de (re-)définir les variables à chaud dans l'environnement X.
    • [^] # Re: ~/.profile

      Posté par  . Évalué à 1.

      Je viens d'essayer et ça ne marche pas :-(
      J'ai créé ce fichier, puis j'ai quitté et relancé ma session X mais les modifications n'ont pas eu lieu.
      Si, à partir d'un terminal je fais source .profile, alors ça marche pour ce terminal.
      • [^] # Re: ~/.profile

        Posté par  . Évalué à 1.

        une solution crade est d'ajouter source ~/.profile dans le fichier adéquat de gdm/kdm ... voire le .xinitrc
        • [^] # Re: ~/.profile

          Posté par  . Évalué à 1.

          Trop radical pour moi.
          J'ai cherché sur internet et tenté d'ajouter mes variables d'environnements aux fichiers :
          ~/.profile
          ~/.xprofile
          ~/.xsession
          ~/.login
          ET RIEN NE MARCHE, c'est lourd.
          Le fichier ~/.xinitrc est soit disant executé à partir de startx mais pas du login manager graphique...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.