การตั้งค่าตัวแปรสภาพแวดล้อม PATH ทั่วทั้งระบบใน Mavericks


41

ในระบบปฏิบัติการเวอร์ชันก่อนหน้าหนึ่งสามารถตั้งค่าตัวแปรสภาพแวดล้อมของระบบ PATH ได้/etc/launchd.confเพื่อให้พร้อมใช้งานสำหรับแอปทั้งหมด (ไม่ใช่แค่บรรทัดคำสั่ง)

ใน Mavericks สิ่งนี้ดูเหมือนจะไม่ได้ใช้อีกต่อไป

มีเทคนิคในการทำสิ่งนี้ใน mavericks อีกหรือไม่

คำตอบ:


50

โยเซมิตี

/etc/launchd.confไม่รองรับอีกต่อไปใน 10.10 ดูman launchctl:

ไฟล์ /etc/launchd.conf จะไม่ได้รับการพิจารณาอีกต่อไปเพื่อให้คำสั่งย่อยทำงานในระหว่างการบู๊ตก่อนเวลา; ฟังก์ชันนี้ถูกลบเพื่อความปลอดภัย

ตอนนี้คุณสามารถบันทึก Plist นี้เป็น~/Library/LaunchAgents/my.startup.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>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

launchctl setenvคำสั่งวิ่งเป็นผู้ใช้จึงจะใช้กับกระบวนการเปิดตัวในโดเมนผู้ใช้

วิธีนี้ใช้ไม่ได้กับแอปพลิเคชันที่เปิดใหม่เมื่อเข้าสู่ระบบหากทำเครื่องหมายที่ "เปิดหน้าต่างอีกครั้งเมื่อลงชื่อเข้าใช้"

Mavericks และก่อนหน้า

ใน 10.9 และรุ่นก่อนหน้าคุณสามารถเรียกใช้ตัวอย่างเช่น

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

จากนั้นรีสตาร์ทเพื่อใช้การเปลี่ยนแปลง

วิธีอื่น ๆ

/etc/pathsและ/etc/paths.d/ใช้เฉพาะ (หรือส่วนใหญ่) กับเปลือกหอย เส้นใน/etc/pathsและ/etc/paths.d/*จะมีการเพิ่มเส้นทางโดยpath_helperซึ่งมีการเรียกใช้จาก/etc/profile, และ/etc/zshenv /etc/csh.loginผมไม่ทราบว่าโปรแกรมอื่น ๆ กว่าเปลือกหอยที่จะพิจารณาใด ๆหรือ/etc/paths/etc/paths.d/

~/.MacOSX/environment.plist หยุดทำงานใน 10.8


2
อ๋อ; มันไม่ได้มีอยู่ตามค่าเริ่มต้น แต่การสร้างและการตั้งค่ารายการที่เหมาะสมจะช่วย
mgol

ในโยเซมิตีฉันพบว่าบางโปรแกรมดูเหมือนจะไม่เห็น PYTHONPATH ซึ่งฉันตั้งไว้ใน /etc/launchd.conf และฉันใช้โปรแกรมแก้ไขบรรทัดคำสั่งของคุณ (ย่อหน้าที่ 2 ในคำตอบของคุณ) และดูเหมือนจะไม่ทำงาน มันเพิ่งทำให้ฉันเกิดข้อผิดพลาด / ข้อความช่วยเหลือ Launchctl
Tango

@ แทงโก้ฉันแก้ไขคำตอบ /etc/launchd.confถูกลบใน 10.10
Lri

ฉันจะเพิ่มว่าประสบการณ์ของฉันในขณะที่เล่นกับทุบตีเป็นที่ใน 10.10, launchctl setenv ดูเหมือนจะไม่ทำอะไรเลย ฉันลองตั้งค่าตัวแปร env จากนั้นตรวจสอบค่าด้วย echo และพวกมันยังไม่ได้กำหนด
Tango

1
@Tango เลิกและเปิดแอปพลิเค terminal launchctl setenvของคุณหลังจากทำงาน launchctl setenvไม่เคยส่งผลกระทบต่อกระบวนการที่มีอยู่
Lri

11

มีวิธีง่ายกว่ามาก /etc/paths.d/วางแฟ้มข้อความในโฟลเดอร์ ในไฟล์ข้อความนี้ป้อนเส้นทางที่ต้องการและขึ้นบรรทัดใหม่ วิธีที่ดีที่สุดคือการสร้างไฟล์ใหม่สำหรับแต่ละพา ธ

ในระบบของฉันมีไฟล์ชื่อ MySQL พร้อมข้อความ '/ usr / local / mysql / bin' และขึ้นบรรทัดใหม่


ฉันเพิ่งโพสต์คำถามใหม่เกี่ยวกับว่ามีวิธีการแก้ไขจุดอ่อนที่ @LauriRanta อธิบายไว้หรือไม่
kuzzooroo

แค่ anacdote: ฉันได้ใช้วิธีนี้เช่นกันเพราะเป็นวิธีที่แนะนำ "OS X" ฉันไม่ได้โชคดีที่ได้รับระบบเพื่อให้เกียรติไฟล์ PATH ที่ฉันมีใน /etc/paths.d อย่างสม่ำเสมอและมักจะจบลงด้วยการใช้คำสั่ง export shell หรือวาง PATH ใน ~ / .bash_profile ซึ่งใช้งานได้ทุกครั้ง ถ้าสำหรับบัญชีผู้ใช้ปัจจุบันของฉันเท่านั้นไม่ใช่ทั้งระบบ หากไฟล์ PATH ใน /etc/paths.d ทำงานได้ดีกับคุณเสมอฉันรู้สึกอิจฉาที่ระบบของคุณทำงานได้ดีกว่าของฉัน;)
chillin

อันนี้ใหม่สำหรับฉัน ดี!
CousinCocaine

3

คุณอาจตั้งค่าตัวแปรสภาพแวดล้อมในไฟล์/etc/launchd-user.conf...

ใน Mavericks ฉันสามารถกำหนดค่าตัวแปรสภาพแวดล้อมในไฟล์โดยใช้บรรทัด:

setenv TEST test

หลังจากบูตใหม่$TESTจาก /etc/launchd-user.conf จะถูกตั้งค่า

แก้ไข

เป็นไปได้ว่าไวยากรณ์ของไฟล์ที่ /etc/launchd.conf นั้นไม่ถูกต้อง คุณสามารถโพสต์เนื้อหาของไฟล์นั้นเพื่อการตรวจสอบได้หรือไม่?

จากสิ่งที่ฉันเห็นการตั้งค่าตัวแปร PATH ใน /etc/launchd.conf ทำงานได้ตามปกติ แต่launchdไม่ได้ดำเนินการใด ๆการขยายตัวพารามิเตอร์ ดังนั้นหากคุณมีรายการที่ชอบsetenv PATH $PATH:/usr/local/binเส้นทางผลลัพธ์ของคุณจะถูกตั้งค่าเป็น " $PATH:/usr/local/bin" (หมายเหตุ: ไม่ใช่ค่าของ PATH แต่เป็นข้อความ "$ PATH")


ขอบคุณปัญหาที่ฉันตั้งไว้คือ PATH ตัวแปรสภาพแวดล้อมอื่น ๆ ดูเหมือนจะใช้งานได้
Tom

@Tom - ฉันได้ให้คำแนะนำเพิ่มเติมข้างต้นแล้ว
Eddie Kelley

1
มันคือ launch-user.conf หรือ launch- [current_user_name] .conf
Shanimal

/etc/launchd.conf ที่มี 'setenv TEST test' จะไม่แพร่กระจายไปยัง Terminal ใน Mavericks ของฉัน
Dave X

โอ๊ะโอ: s / Mavericks / Yosemite /
Dave X

0

ในการติดตั้ง Mavericks ของฉันการเพิ่ม "setenv PATH blablabla" ไปยัง /etc/launchd.conf ไม่ทำงานหลังจากรีบูต

ดังนั้นฉันจึงเพิ่มเส้นทางใหม่ของฉันไปยังจุดสิ้นสุดของ / etc / path ซึ่งใช้งานได้


มันไม่ได้ผลสำหรับฉัน ฉันรีบูต/etc/pathsมีทุกสิ่งที่ฉันต้องการและยังประเสริฐยังเห็นเฉพาะเส้นทางดั้งเดิม ถ้าฉันเรียกใช้จากเทอร์มินัลมันใช้งานได้
mgol

คำสั่ง path_helper ใน / etc / profile ของฉันใช้ / etc / path และ /etc/paths.d เพื่อเขียนทับ PATH ใด ๆ ที่อาจถูกตั้งค่าโดย /etc/launchd.conf
Dave X

0

ฉันพบว่า setenv PATH ยังใช้งานได้กับฉันสำหรับ Terminal และแอปพลิเคชัน แต่แตกในเชลล์สคริปต์เปิดตัวโดยตรงผ่านการคลิกหรือเปิดด้วยใน Terminal จากการพูด Finder มันแปลกมาก ตัวแปรสภาพแวดล้อมอื่น ๆ ตั้งอยู่ในที่/etc/launchd.confทำงาน

~/.bash_profileเพื่อที่จะแก้ปัญหาให้เชลล์สคริปต์เปิดตัวโดยตรงผมซ้ำการตั้งค่าในเส้นทาง


0

การแก้ไข/etc/paths.dหรือการใช้.bash_profileไม่ได้ผลสำหรับฉัน แต่ตามคำแนะนำจากคนอื่น (ฉันมาที่นี่เพื่ออัปเกรดคำตอบของเขา แต่ฉันไม่พบมันอีกเลยเหรอ!) ฉันแก้ไข/etc/pathsซึ่งเหมาะกับฉัน

ในกรณีของฉันฉันเพิ่มเครื่องมือ android adbและandroidคำสั่งเทอร์มินัลโดยชี้ไปที่เส้นทาง sdk ของพวกเขา ( adbได้ย้ายไปยังไดเรกทอรีอื่นทุกวันนี้) ซึ่งดูเหมือน

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools

0

SWEET เพิ่ม XML ให้กับ ~ / Library / LaunchAgents / setenv.SVN.plist อนุญาตให้ BBEdit ใช้ไบนารีการโค่นล้มที่ฉันติดตั้งใน / opt

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>

1
ความคิดใด ๆ วิธีการตรวจสอบว่าไฟล์นี้รองรับการขยายพารามิเตอร์? ฉันอาจกำหนดเส้นทางเพื่อให้ in / opt เป็นอันเดียวเท่านั้น และฉันคิดว่าเป็นไปได้ว่าจะไม่รองรับการใช้ $ PATH คุณจะกำหนดเส้นทางที่มีอยู่เพื่อเริ่มต้นอย่างไร
Mark M

-1

เพียงเพิ่ม 'bin' (พา ธ ที่คุณต้องการเพิ่ม) พา ธ ไปยังไฟล์ / etc / path - รีบูทหรือ relogin !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

บันทึกไฟล์และเชื่อมต่อใหม่ ... หวังว่าสิ่งนี้จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.