2010-08-07 17 views
6

falta cuando me echo $ PATH en mi línea de comandos, devuelve

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/MAMP/Library/bin:/usr/local/git/bin:/usr/X11/bin 

Cuando ejecuto el código php

exec('echo $PATH; whoami; less /etc/paths; 2>&1') 

consigo

string 'echo $PATH; whoami; less /etc/paths; 2>&1' (length=56) 
array 
    0 => string '/usr/bin:/bin:/usr/sbin:/sbin' (length=29) 
    1 => string 'eric' (length=4) 
    2 => string '/usr/bin' (length=8) 
    3 => string '/bin' (length=4) 
    4 => string '/usr/sbin' (length=9) 
    5 => string '/sbin' (length=5) 
    6 => string '/usr/local/bin' (length=14) 
    7 => string '/Applications/MAMP/Library/bin' (length=30) 
    8 => string '/usr/bin:/bin:/usr/sbin:/sbin' (length=29) 

Esto está en Mac OS X. ¿Alguien puede decirme por qué faltan mis dos últimos elementos de ruta?

+0

Llamas a PHP dentro de apache o cli – mathk

Respuesta

2

Las variables de entorno en Mac OS X se establecen mediante diferentes mecanismos dependiendo de cómo se lanzó su código o su proceso principal. Para garantizar que los elementos lanzados desde un shell interactivo y los elementos lanzados por WindowServer tengan la misma ruta, debe mantener ~/.MacOSX/environment.plist sincronizado con lo establecido en .profile (o .cshrc).

10

intente ejecutar este antes de llamar exec:

putenv("PATH=" .$_ENV["PATH"]. ':/usr/local/git/bin:/usr/X11/bin'); 
+1

si utilizo getenv ("PATH"), devuelve la ruta correcta con mi anexión. –

5

¿Qué:

php -r 'print getenv("PATH");' 

DOY?

Es probable que el shell que genera PHP (probablemente sh en lugar de bash) no obtenga el mismo entorno que tiene en la línea de comandos. No dice cómo está ejecutando su comando exec.

Esto le mostrará qué shell se está ejecutando:

php -r 'echo shell_exec("echo $0");' 

Es posible que necesite utilizar el comando putenv o determinar si su trayectoria se debe establecer en /etc/profile, ~/.profile o ~/.bashrc con el fin de que sea recogido.

+0

Respondió con sh. –

+1

@Eric: intente configurar y exportar 'ENV' en el entorno desde el que ejecuta el script (antes de ejecutarlo). Por ejemplo: 'export ENV =/etc/profile' o' export ENV =/home/username/.profile'. (Si usa '/ .bashrc', necesitará ingresar un código que impida que' sh' ejecute el código específico de Bash que no puede entender). El shell Bourne solo obtiene esos archivos automáticamente cuando se inicia sesión cáscara. –