2010-08-07 9 views
6

जब मैं अपने कमांड लाइन पर $ पथ गूंज, यह रिटर्न

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

जब मैं इस php कोड निष्पादित

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

मैं

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) 

यह मैक ओएस एक्स पर है। क्या कोई मुझे बता सकता है कि मेरे पिछले दो पथ तत्व क्यों गुम हैं?

+0

क्या आप PHP को अपाचे के भीतर या क्ली – mathk

उत्तर

2

मैक ओएस एक्स पर पर्यावरण चर अलग-अलग तंत्र द्वारा निर्धारित किए जाते हैं कि आपका कोड, या इसकी मूल प्रक्रिया कैसे लॉन्च की गई थी। एक इंटरैक्टिव खोल से लॉन्च किए गए आइटमों को बीमा करने के लिए और विंडोसेवर द्वारा लॉन्च किए गए आइटमों का एक ही पथ है, आपको ~/.MACOSX/environment.plist को .profile (या .cshrc) में सेट किए गए सिंक में रखने की आवश्यकता है।

10

कोशिश इस निष्पादित करने से पहले आप exec फोन:

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

में कॉल कर रहे हैं यदि मैं getenv ("पथ") का उपयोग करता हूं, तो यह मेरे संलग्न होने के साथ उचित पथ देता है। –

5

क्या करता है:

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

आप दे?

यह संभावना है कि PHP स्पॉन्स (शायद shbash के बजाय) कमांड लाइन पर आपके पास समान वातावरण नहीं मिल रहा है। आप यह नहीं कहते कि आप अपना exec कमांड कैसे चला रहे हैं।

यह तुम्हें दिखाता हूँ जो खोल रन किया जा रहा है:

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

आप putenv आदेश का उपयोग करें या निर्धारित अपने पथ क्रम में /etc/profile, ~/.profile या ~/.bashrc में सेट किया जा करने के लिए इसे होने के लिए की जरूरत है कि क्या करना पड़ सकता है उठाया।

+0

उसने sh के साथ जवाब दिया। –

+1

@Eric: पर्यावरण में 'ENV' को सेट करने और निर्यात करने का प्रयास करें जिसे आप अपनी स्क्रिप्ट चला रहे हैं (इसे चलाने से पहले)। उदाहरण के लिए: 'निर्यात ENV =/etc/profile' या' export ENV =/home/username/.profile' निर्यात करें। (यदि आप '/ .bashrc' का उपयोग करते हैं, तो आपको उस कोड को रखना होगा जो 'sh' को बैश-विशिष्ट कोड चलाने से रोकता है जिसे वह समझ नहीं सकता है।) बोर्न शेल केवल लॉगिन होने पर उन फ़ाइलों को स्वचालित रूप से स्रोत करता है खोल। –

संबंधित मुद्दे