[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: PHP+APache : problème pour lire les variables d'environnements



Patrice OLIVER a écrit :
A quoi correspond le PATH retourné ? J'avoue rester perplexe. Si vous
avez des suggestions, je suis preneur.

Au PATH du user apache utilisé.
Ce user n'utilise pas /etc/profile s'il ne tourne pas dans un shell interactif.

Cf man bash (rechercher "profile")

       When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads  and  executes  commands
       from  the  file  /etc/profile, if that file exists.  After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that
       order, and reads and executes commands from the first one that exists and is readable.  The --noprofile option may  be  used  when  the  shell  is
       started to inhibit this behavior.

       When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

       When  an  interactive  shell  that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these
       files exist.  This may be inhibited by using the --norc option.  The --rcfile file option will force bash to read and execute commands  from  file
       instead of /etc/bash.bashrc and ~/.bashrc.

       When  bash  is  started  non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its
       value if it appears there, and uses the expanded value as the name of a file to read and execute.  Bash behaves as if the following  command  were
       executed:
              if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
       but the value of the PATH variable is not used to search for the file name.
etc...


et en français ça donne

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

       Lorsqu’un interpréteur de commandes de connexion termine, bash lit et exécute les commandes du fichier ~/.bash_logout, s’il existe.

       Quand un interpréteur interactif démarre sans être un interpréteur de commandes de connexion, bash lit et exécute les commandes se  trouvant  dans
       /etc/bash.bashrc  et  ~/.bashrc  s’ils  existent. Ce comportement peut être empêché à l’aide de l’option --norc. L’option --rcfile fichier forcera
       bash à lire et exécuter les commandes dans fichier plutôt que dans /etc/bash.bashrc et ~/.bashrc.

       Quand bash est démarré de façon non interactive, par exemple pour lancer un  script,  il  consulte  la  variable  BASH_ENV  dans  l’environnement,
       développe son contenu si elle existe et considère cette valeur comme le nom d’un fichier à lire et exécuter. Bash se comporte comme si la commande
       suivante était exécutée :
              if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
       mais la valeur de la variable PATH n’est pas utilisée pour rechercher le fichier.

       Si bash est appelé sous le nom sh, il essaye d’imiter le comportement de démarrage des versions historiques de sh aussi fidèlement  que  possible,
       tout  en restant conforme aux spécifications POSIX. Lorsqu’il est appelé comme interpréteur de commandes de connexion interactif ou non interactif
       avec l’option --login, il essaye d’abord de lire et exécuter, dans cet ordre, les commandes de /etc/profile puis de ~/.profile. L’option  --nopro‐
       file  peut  être  utilisée  pour empêcher ce comportement. Quand il est appelé en tant qu’interpréteur interactif sous le nom sh, bash consulte la
       variable ENV, développe sa valeur si elle est définie et utilise le résultat en tant que nom de fichier à lire et exécuter. Comme un  interpréteur
       appelé  sous  le  nom  sh n’essaye pas de lire et d’exécuter des commandes d’un quelconque autre fichier de démarrage, l’option --rcfile n’a aucun
       effet. Un interpréteur non interactif appelé sous le nom sh n’essaie de lire aucun autre fichier d’initialisation. Quand il est appelé sous le nom
       sh, bash entre en mode posix après avoir lu les fichiers d’initialisation.

       Quand  bash  est  appelé en mode posix comme avec l’option --posix sur la ligne de commande, il suit le standard POSIX pour les fichiers de démar‐
       rage. Dans ce mode, les interpréteurs interactifs développent la variable ENV et les commandes sont lues et exécutées à partir du fichier dont  le
       nom est la valeur développée. Aucun autre fichier d’initialisation n’est lu.

--
Daniel



Reply to: