การตั้งค่าตัวแปรสภาพแวดล้อมผ่าน launchd.conf ไม่ทำงานใน OS X Yosemite / El Capitan / macOS Sierra / Mojave อีกต่อไป?


190

ดูเหมือนว่าlaunchd.confจะไม่โหลดตัวแปรสภาพแวดล้อมของฉันอีกต่อไป มีใครสังเกตเห็นบ้างไหม?

มีวิธีอื่นในการตั้งค่าตัวแปรสภาพแวดล้อมอย่างถาวรหรือไม่


มันใช้งานได้และทำให้ตัวเองมีอยู่ในแอปพลิเคชัน แต่ไม่ได้อยู่ในเทอร์มินัล
Chang Zhao

คำตอบ:


159

สร้างenvironment.plistไฟล์~/Library/LaunchAgents/ด้วยเนื้อหานี้:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>
    launchctl setenv PRODUCTS_PATH /Users/mortimer/Projects/my_products
    launchctl setenv ANDROID_NDK_HOME /Applications/android-ndk
    launchctl setenv PATH $PATH:/Applications/gradle/bin
    </string>

  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

คุณสามารถเพิ่มlaunchctlคำสั่งมากมายใน<string></string>บล็อก

plistจะเปิดใช้งานหลังจากรีบูตระบบ คุณยังสามารถใช้launchctl load ~/Library/LaunchAgents/environment.plistเพื่อเปิดใช้ทันที

[แก้ไข]

โซลูชันเดียวกันทำงานใน El Capitan เช่นกัน

Xcode 7.0+ ไม่ได้ประเมินตัวแปรสภาพแวดล้อมตามค่าเริ่มต้น พฤติกรรมเก่าสามารถเปิดใช้งานด้วยคำสั่งนี้:

defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO

[แก้ไข]

มีบางสถานการณ์ที่ไม่ได้ผล หากคอมพิวเตอร์รีสตาร์ทและเลือก "เปิดหน้าต่างอีกครั้งเมื่อลงชื่อเข้าใช้" หน้าต่างที่เปิดใหม่อาจไม่เห็นตัวแปร (บางทีพวกเขาจะถูกเปิดก่อนที่เอเจนต์จะทำงาน) นอกจากนี้หากคุณเข้าสู่ระบบผ่าน ssh ตัวแปรจะไม่ถูกตั้งค่า (ดังนั้นคุณจะต้องตั้งค่าเป็น ~ / .bash_profile) ในที่สุดสิ่งนี้ดูเหมือนจะไม่สามารถใช้ได้กับ PATH บน El Capitan และ Sierra ต้องมีการตั้งค่าผ่าน 'เส้นทางผู้ใช้ configctl config ... ' และใน / etc / path


20
ไม่ต้องรีบูท! คุณสามารถทำ "launchctl start environment.plist" และรีสตาร์ทแอพที่คุณต้องได้รับ env vars ใหม่;)
hasvn

1
สิ่งนี้จะไม่ทำงานกับตัวแปร PATH สำหรับฉัน ดังนั้นนอกเหนือจากวิธีนี้สำหรับการตั้งค่าตัวแปรอื่น ๆ ฉันตั้งค่าตัวแปร PATH ใน ~ / .bash_profile สิ่งนี้อาจใช้ไม่ได้กับทุกกรณี แต่จนถึงตอนนี้ฉันยังไม่มีปัญหา
djule5

6
คิดออก: ในการทำงานโดยไม่ต้องรีบูตมันควรจะเป็น " สภาพแวดล้อมในการเปิดใช้งาน loadctlplist " ไม่เริ่ม
Dave Hartnoll

2
อ่าใช่ ไม่เหมือนการตั้งค่าที่ไม่ชัดเจนซึ่งปรากฏขึ้นอย่างแน่นอน 9 ครั้งในอินเทอร์เน็ตทั้งหมด (google UseSanitizedBuildSystemEnvironment)
Ohad Schneider

2
ใช้งานได้กับ Sierra เช่นกัน
Shwouchk

64

[ คำตอบดั้งเดิม ]: คุณยังสามารถใช้launchctl setenv variablename valueเพื่อตั้งค่าตัวแปรเพื่อให้รับได้จากแอปพลิเคชันทั้งหมด (แอปพลิเคชันกราฟิกที่เริ่มต้นผ่าน Dock หรือ Spotlight นอกเหนือจากที่เริ่มต้นผ่านเทอร์มินัล)

แน่นอนคุณจะไม่ต้องการทำเช่นนี้ทุกครั้งที่คุณเข้าสู่ระบบ

[ แก้ไข ]: เพื่อหลีกเลี่ยงปัญหานี้ให้เรียกใช้AppleScript Editorงานป้อนคำสั่งดังนี้:

do shell script "launchctl setenv variablename value"

(ใช้หลายบรรทัดหากคุณต้องการตั้งค่าหลายตัวแปร)

ตอนนี้บันทึก ( + s) เป็นรูปแบบไฟล์: แอพลิเคชัน ในที่สุดก็เปิดSystem Settingsผู้ใช้ & กลุ่มรายการเข้าสู่ระบบและเพิ่มแอปพลิเคชันใหม่ของคุณ

[ คำตอบเดิม ]: เพื่อหลีกเลี่ยงสถานที่นี้ตัวแปรทั้งหมดที่คุณต้องการที่จะกำหนดในเชลล์สคริปต์สั้น ๆ แล้วต้องดูที่นี้คำตอบก่อนหน้าเกี่ยวกับวิธีการเรียกใช้สคริปต์บน MacOS เข้าสู่ระบบ ด้วยวิธีนี้สคริปต์จะถูกเรียกใช้เมื่อผู้ใช้ล็อกอิน

[ แก้ไข ]: ไม่มีวิธีแก้ปัญหาที่สมบูรณ์แบบเนื่องจากตัวแปรจะถูกตั้งค่าสำหรับผู้ใช้เฉพาะนั้นแต่ฉันหวัง / คาดเดาว่าอาจเป็นสิ่งที่คุณต้องการ

หากคุณมีผู้ใช้หลายคนคุณสามารถตั้งค่ารายการเข้าสู่ระบบด้วยตนเองสำหรับผู้ใช้แต่ละคนหรือวางสำเนาของcom.user.loginscript.plistในไดเรกทอรีLibrary / LaunchAgentsแต่ละโลคัลชี้ไปที่เชลล์สคริปต์เดียวกัน

ที่ได้รับค่าการแก้ไขปัญหาเหล่านี้เป็นความสะดวกที่/etc/launchd.conf

[ แก้ไขเพิ่มเติม ]: ผู้ใช้ด้านล่างระบุว่าสิ่งนี้ไม่ได้ผลสำหรับเขา อย่างไรก็ตามฉันได้ทำการทดสอบกับเครื่องโยเซมิตีหลายเครื่องและมันก็ใช้งานได้สำหรับฉัน หากคุณกำลังมีปัญหาโปรดจำไว้ว่าคุณจะต้องรีสตาร์ทแอปพลิเคชันเพื่อให้สิ่งนี้มีผล นอกจากนี้ถ้าคุณตั้งค่าตัวแปรใน terminal ผ่าน~ / .profileหรือ~ / .bash_profileพวกเขาจะแทนที่สิ่งที่ตั้งค่าผ่านทางlaunchctl setenvสำหรับการใช้งานเริ่มต้นจากเปลือก


5
เท่าที่ฉันสามารถบอกได้ข้อเสียอย่างหนึ่งของเทคนิคนี้ก็คือตัวแปรจะไม่ถูกตั้งค่าสำหรับแอปพลิเคชันอื่น ๆ ที่เริ่มต้นในการเข้าสู่ระบบ ตัวอย่างเช่นถ้าคุณเปิดเทอร์มินัลตัวแปรจะถูกตั้งค่า แต่ถ้าคุณออกจากระบบและเปิดใหม่อีกครั้งโดยที่เทอร์มินัลรีสตาร์ทโดยอัตโนมัติตัวแปรจะไม่ได้รับการตั้งค่า ...
JasonD

ฉันได้ลองวิธีนี้แล้วและก็ไม่ได้ผลสำหรับฉันเช่นกัน แต่ฉันคาดหวังเป็นพิเศษว่า Java IDE ของฉัน (IntelliJ) เพื่อรับการแก้ไขพา ธ ของฉันและไม่ใช่ ทุกอย่างใช้งานได้ดีจากเทอร์มินัล อาจเป็นข้อผิดพลาดใน IntelliJ ยังคงน่าผิดหวังที่ Apple ลบฟังก์ชันการทำงานนี้ ฉันโทรหา Apple และพวกเขาก็ไม่ได้ช่วยอะไรมาก
Jason

สิ่งนี้ใช้งานได้สำหรับฉัน แต่คุณรู้หรือไม่ว่าจะต้องเพิ่มตัวแปรสภาพแวดล้อมลงใน sudo ด้วยหรือไม่
etiennenoel

2
สิ่งนี้จะใช้งานได้ทั่วไป แต่มีข้อผิดพลาดใน Yosemite (อย่างน้อย 10.10.0 และ 10.10.1 อย่างน้อย) ที่การตั้งค่า $ PATH ไม่ทำงานด้วยวิธีนี้ Apple ตระหนักถึงข้อผิดพลาด ปัจจุบัน (ณ วันที่ 10.10.1) ไม่มีวิธีการตั้งค่า $ PATH ทั่วทั้งระบบสำหรับแอพ GUI
TJ Luoma

3
หลังจากคุณใช้หนึ่งในวิธีที่กล่าวมาข้างต้นและรีบูตแล็ปท็อปของคุณ - ตรวจสอบให้แน่ใจว่าคุณได้เปิดแอปพลิเคชั่นใหม่อย่างชัดเจน (เช่น iTerm, terminal, Eclipse, IDEA หรืออะไรก็ตามที่คุณใช้) หากคุณไม่ได้ทำการรีสตาร์ทอย่างชัดเจนและหากในขณะที่ทำการรีบูต OSx ช่องทำเครื่องหมายถูกทำเครื่องหมายที่ "รีสตาร์ท windows เมื่อทำการล็อกอินกลับ" (ซึ่งเป็นค่าเริ่มต้น) - โปรแกรมเหล่านั้นจะไม่อ่านตัวแปรสภาพแวดล้อมใหม่
Ran

21

เป็นไปได้ที่จะตั้งค่าตัวแปรสภาพแวดล้อมบน Mac OS X 10.10 Yosemite ด้วย 3 ไฟล์ + 2 คำสั่ง

ไฟล์หลักที่มีการกำหนดตัวแปรสภาพแวดล้อม:

$ ls -la /etc/environment 
-r-xr-xr-x  1 root  wheel  369 Oct 21 04:42 /etc/environment
$ cat /etc/environment
#!/bin/sh

set -e

syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - start"

launchctl setenv JAVA_HOME      /usr/local/jdk1.7
launchctl setenv MAVEN_HOME     /opt/local/share/java/maven3

if [ -x /usr/libexec/path_helper ]; then
    export PATH=""
    eval `/usr/libexec/path_helper -s`
    launchctl setenv PATH $PATH
fi

osascript -e 'tell app "Dock" to quit'

syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - complete"

ข้อกำหนดบริการเพื่อโหลดตัวแปรสภาพแวดล้อมสำหรับแอปพลิเคชันผู้ใช้ (เทอร์มินัล, IDE, ... ):

$ ls -la /Library/LaunchAgents/environment.user.plist
-rw-------  1 root  wheel  504 Oct 21 04:37 /Library/LaunchAgents/environment.user.plist
$ sudo cat /Library/LaunchAgents/environment.user.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>environment.user</string>
    <key>ProgramArguments</key>
    <array>
            <string>/etc/environment</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
    <key>WatchPaths</key>
    <array>
        <string>/etc/environment</string>
    </array>
</dict>
</plist>

นิยามบริการเดียวกันสำหรับแอปพลิเคชันผู้ใช้รูท:

$ ls -la /Library/LaunchDaemons/environment.plist
-rw-------  1 root  wheel  499 Oct 21 04:38 /Library/LaunchDaemons/environment.plist
$ sudo cat /Library/LaunchDaemons/environment.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>environment</string>
    <key>ProgramArguments</key>
    <array>
            <string>/etc/environment</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
    <key>WatchPaths</key>
    <array>
        <string>/etc/environment</string>
    </array>
</dict>
</plist>

และในที่สุดเราควรลงทะเบียนบริการเหล่านี้:

$ launchctl load -w /Library/LaunchAgents/environment.user.plist
$ sudo launchctl load -w /Library/LaunchDaemons/environment.plist

สิ่งที่เราได้รับ:

  1. ที่เดียวที่จะประกาศตัวแปรสภาพแวดล้อมระบบ: / etc / environment
  2. อัปเดตตัวแปรสภาพแวดล้อมโดยอัตโนมัติทันทีหลังจากแก้ไขไฟล์ / etc / environment เพียงแค่เปิดแอปพลิเคชันของคุณใหม่

ปัญหา / ปัญหา:

เพื่อให้ตัวแปร env ของคุณถูกใช้อย่างถูกต้องโดยแอปพลิเคชันหลังจากรีบูตระบบคุณจะต้อง:

  • ล็อกอินทั้งสองครั้ง: login => logout => login
  • หรือปิด & เปิดแอปพลิเคชันอีกครั้งด้วยตนเองโดยควรใช้ตัวแปร env
  • หรือไม่ใช้คุณสมบัติ "เปิดหน้าต่างอีกครั้งเมื่อเข้าสู่ระบบกลับ"

สิ่งนี้เกิดขึ้นเนื่องจาก Apple ปฏิเสธการสั่งซื้อบริการที่โหลดอย่างชัดเจนดังนั้นตัวแปร env จะถูกลงทะเบียนควบคู่กับการประมวลผลของ "เปิดคิวอีกครั้ง"

แต่จริงๆแล้วฉันรีบูทระบบของฉันปีละหลายครั้งเท่านั้น (ในการอัปเดตครั้งใหญ่) ดังนั้นจึงไม่ใช่เรื่องใหญ่


ความคิดที่ดี. ฉันลองและใช้งานได้กับตัวแปรสภาพแวดล้อมส่วนใหญ่ (เช่นJAVA_HOME) แต่ไม่ใช่สำหรับPATHตัวแปร (ดูคำถามของฉันในการถามที่แตกต่างกัน )
halloleo

4
ควรตั้งค่า PATH ด้วยไฟล์ / etc / path เพียงเพิ่มเส้นทางที่กำหนดเองของคุณไปที่ท้ายไฟล์นี้
ursa

ฉันไม่คุ้นเคยlaunchdแต่ไม่สามารถโหลด Daemons เหล่านั้นตอนบูตได้ (เช่นก่อนเข้าสู่ระบบ) หรือไม่ ที่ควรหลีกเลี่ยงปัญหาทั้งหมดที่คุณพูดถึง
Egon

ฉันชอบวิธีการข้างต้น แต่มีปัญหาแปลก ๆ ในการจัดการ หลังจากรีบูต Genet VARNAME จะส่งคืนค่าที่ถูกต้องให้ฉัน แต่ echo $ VARNAME จะส่งคืนอะไรเลย สิ่งนี้อาจเป็นเหตุผลสำหรับเรื่องนี้? ฉันโพสต์นั้นไปที่stackoverflow.com/questions/27045137/ …และหวังว่าทุกคนที่นี่จะมีความคิด
ctp

ตรวจสอบให้แน่ใจว่าการอนุญาตไฟล์ของ / etc / environment เป็นไปตามที่อธิบายไว้ข้างต้น
imanuelcostigan

6

อ้างจาก

Apple Developer Relations 10-Oct-2014 09:12 PM

หลังจากการไตร่ตรองอย่างถี่ถ้วนแล้ววิศวกรรมได้ลบคุณลักษณะนี้ออกไป ไฟล์/etc/launchd.confถูกลบโดยเจตนาเพื่อเหตุผลด้านความปลอดภัย ในฐานะที่เป็นวิธีแก้ปัญหาที่คุณสามารถเรียกใช้เป็นรากต้นในระหว่างการบูตบางทีจากlaunchctl limit LaunchDaemon( ... )

สารละลาย:

ใส่รหัสใน/Library/LaunchDaemons/com.apple.launchd.limit.plistโดย bash-script:

#!/bin/bash

echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>eicar</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/launchctl</string>
                <string>limit</string>
                <string>core</string>
                <string>unlimited</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>ServiceIPC</key>
        <false/>
</dict>
</plist>' | sudo tee /Library/LaunchDaemons/com.apple.launchd.limit.plist

1
คุณช่วยอธิบายเรื่องนี้อีกหน่อยได้ไหม? ฉันไม่เห็นว่า 'การแก้ปัญหา' เกี่ยวข้องกับปัญหาเริ่มต้นอย่างไร!
Nick H247

ไม่ใช่ OP แต่ฉันคิดว่าแก่นสารที่นี่คือ: ใส่ plist นี้/Library/LaunchDaemonsและแทนที่จะบอกlaunchctlให้รันlimitคำสั่งบอกให้รันsetenvคำสั่งด้วยPATHและสตริงพา ธ เป็นอาร์กิวเมนต์ launchdควรรับมันโดยอัตโนมัติเมื่อเริ่มต้นและรับการแก้ไขตัวเองเกือบจะในทันที
Laird Nelson

5
คัดลอก xml ไม่สมบูรณ์ บรรทัด<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
Doctype

6
@aax ส่วนใดของผู้วางแผนที่ตั้งตัวแปรสภาพแวดล้อมจริง?
HairOfTheDog

3

นี่คือคำสั่งเพื่อคืนค่าลักษณะการทำงานเก่า:

# create a script that calls launchctl iterating through /etc/launchd.conf
echo '#!/bin/sh

while read line || [[ -n $line ]] ; do launchctl $line ; done < /etc/launchd.conf;
' > /usr/local/bin/launchd.conf.sh

# make it executable
chmod +x /usr/local/bin/launchd.conf.sh

# launch the script at startup
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>launchd.conf</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>/usr/local/bin/launchd.conf.sh</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>
' > /Library/LaunchAgents/launchd.conf.plist

ตอนนี้คุณสามารถระบุคำสั่งเช่นในsetenv JAVA_HOME /Library/Java/Home/etc/launchd.conf

ตรวจสอบกับ El Capitan


2

สิ่งที่ได้ผลสำหรับฉัน (ได้รับแรงบันดาลใจจาก aax 'ขอบคุณ):

วางสิ่งนี้ลงใน/Library/LaunchDaemons/com.apple.launchd.limit.plistจากนั้นรีบูท:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
  <dict>
  <key>Label</key>
  <string>eicar</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/launchctl</string>
    <string>limit</string>
    <string>maxfiles</string>
    <string>16384</string>
    <string>16384</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>ServiceIPC</key>
  <false/>
</dict>
</plist>

หากคุณต้องการทีละขั้นตอน:

  • เรียกใช้เทอร์มินัล
  • พิมพ์sudo suจากนั้นป้อนรหัสผ่านของคุณเพื่อเข้าสู่ระบบในฐานะ root
  • พิมพ์vi /Library/LaunchDaemons/com.apple.launchd.limit.plist
  • เมื่อเข้าสู่เครื่องมือแก้ไข vi กดปุ่มiเพื่อเข้าสู่โหมดแทรกแล้ววางเนื้อหารหัสที่แน่นอนด้านบน ( ⌘+v) สิ่งนี้จะบังคับให้มีการ จำกัด ไฟล์ 16384 ต่อกระบวนการและไฟล์ทั้งหมด 16384 ไฟล์
  • บันทึกไฟล์ของคุณและเลิกใช้escแล้ว:wq
  • รีบูทระบบของคุณและตรวจสอบว่ามันใช้งานได้โดยใช้คำสั่งlaunchctl limit

ฉันหวังว่านี่จะช่วยคุณได้


10
โซลูชันนี้เกี่ยวข้องกับการตั้งค่าตัวแปรสภาพแวดล้อมอย่างไร
HairOfTheDog

2

คุณสามารถลองhttps://github.com/ersiner/osx-env-sync มันจัดการทั้งบรรทัดคำสั่งและแอพ GUIจากแหล่งเดียวและทำงานร่วมกับOS X เวอร์ชันล่าสุด (Yosemite)

คุณสามารถใช้การแทนค่าพา ธ และลูกเล่นอื่น ๆ ของเชลล์ได้เนื่องจากสิ่งที่คุณเขียนคือสคริปต์ทุบตีปกติที่จะต้องจัดหาจากการทุบตีในตอนแรก ไม่มีข้อ จำกัด .. (ตรวจสอบเอกสารประกอบosx-env-syncและคุณจะเข้าใจว่ามันประสบความสำเร็จได้อย่างไร)

ฉันตอบคำถามที่คล้ายกันที่นี่ซึ่งคุณจะพบมากขึ้น


-3

/etc/profileการแก้ปัญหาคือการเพิ่มตัวแปรของคุณเพื่อ จากนั้นทุกอย่างทำงานตามที่คาดไว้! แน่นอนคุณต้องเป็นผู้ใช้รูทที่มี sudo nano / etc / profile หากคุณแก้ไขด้วยวิธีอื่นระบบจะร้องเรียนกับ / etc / profile ที่เสียหายแม้ว่าคุณจะเปลี่ยนสิทธิ์ในการรูทก็ตาม


7
การเพิ่มตัวแปรสภาพแวดล้อมในโปรไฟล์นั้นด้อยกว่ามากเพราะมันมีผลต่อกระบวนการเชลล์เท่านั้น
UloPe

-5

ฉันเพิ่มตัวแปรใน ~ / .bash_profile ด้วยวิธีต่อไปนี้ หลังจากคุณรีสตาร์ทเสร็จแล้ว / ออกจากระบบและเข้าสู่ระบบ

export M2_HOME=/Users/robin/softwares/apache-maven-3.2.3
export ANT_HOME=/Users/robin/softwares/apache-ant-1.9.4
launchctl setenv M2_HOME $M2_HOME
launchctl setenv ANT_HOME $ANT_HOME
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/robin/softwares/apache-maven-3.2.3/bin:/Users/robin/softwares/apache-ant-1.9.4/bin
launchctl setenv PATH $PATH

หมายเหตุ: โดยไม่ต้องรีสตาร์ท / ออกจากระบบและเข้าสู่ระบบคุณสามารถใช้การเปลี่ยนแปลงเหล่านี้โดยใช้;

source ~/.bash_profile

โปรดทราบว่าคุณไม่จำเป็นต้องออกจากระบบและกลับมาใหม่เพียงใช้คำสั่ง source เช่น source .bash_profile
Michael

2
นอกจากนี้ปัญหาเกี่ยวกับวิธีนี้คือคุณยังต้องเปิดเทอร์มินัลก่อนที่ตัวแปรสภาพแวดล้อมจะพร้อมใช้งาน ดีกว่าที่จะทำสิ่งที่อยู่ในคำตอบแรกเพื่อให้พวกเขาสามารถใช้ได้โดยไม่ต้องเปิดเครื่อง
Michael

1
สิ่งนี้ใช้ไม่ได้กับแอพที่โหลดผ่าน SpotLight stackoverflow.com/questions/135688/…
Rasika Perera

1
การใช้ไฟล์กำหนดค่า bash นั้นเป็นวิธีใช้ที่ จำกัด เนื่องจากมันจะทึกทักเอาเองว่าคุณได้รับการทุบตีในฐานะบรรพบุรุษของกระบวนการที่สภาพแวดล้อมของคุณพยายามทำให้เกิดผล Spotlight, เครื่องมือค้นหา, emacs, xcode, cronjobs, ตัวแทน launchd, IDE ใด ๆ , เบราว์เซอร์ที่ใช้ควบคุมแหล่งข้อมูลเป็นต้นและอื่น ๆ ทั้งหมดจะไม่ถูกทุบตีในฐานะบรรพบุรุษ กระบวนการเดียวที่สามารถครอบคลุมสิ่งเหล่านี้อย่างสม่ำเสมอคือ launchd
เบ็นไฮด์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.