ใน Mountain Lion ฉันจะตั้งค่าได้อย่างไรในที่เดียวตัวแปรสภาพแวดล้อม PATH สำหรับแอปพลิเคชันที่เพิ่งเปิดตัวใหม่ทั้งหมด?


9

มีคำถามมากมายเกี่ยวกับPATHตัวแปรสภาพแวดล้อมและวิธีตั้งค่าสำหรับแอปพลิเคชันที่เปิดตัวโดยเชลล์โดยสปอตไลท์หรือผ่านตัวค้นหา (คำถามทั่วไป: วิธีตั้งค่า PATH สำหรับแอปพลิเคชันที่เปิดตัว Finderหรือวิธีเปลี่ยนตัวแปรสภาพแวดล้อม PATH .. )

คำตอบช่วงจากshสคริปต์เริ่มต้นที่จะไป/etc/paths /etc/launchd.confฉันอยู่ที่นี่หลังจากคำตอบสำหรับการตั้งค่าแบบรวมของPATHแอพทั้งหมดใน Mac OS X Mountain Lion 10.8.2

คำตอบ:


14

หลังจากการทดลองมากมายที่มีตัวเลือกต่างกันฉันก็สรุปว่า:

มีวิธีรวมการตั้งค่าPATHสำหรับแอปพลิเคชันที่เปิดตัวด้วยวิธีการที่แตกต่างกัน (เช่น shell script, Finder และ Spotlight)? ก็ใช่และไม่ใช่:

  • ไม่ : การตั้งค่าPATHสคริปต์เริ่มต้นของเชลล์ (เช่น.bashrc) ใช้งานได้กับแอปที่เปิดตัวโดยเชลล์เท่านั้น
  • ไม่ : การตั้งค่าPATHสำหรับlaunchdกระบวนการปัจจุบันผ่านlaunchctl setenv PATH <...>ไม่ได้สำหรับฉันเลย
  • ใช่ : การตั้งค่าPATHใน/etc/launchd.conf(และการรีสตาร์ทระบบ) จะทำให้PATHมองเห็นได้อย่างเหมาะสมในแอปพลิเคชั่นที่เปิดตัวโดย Spotlight, Dock และ Finder และเชลล์ (local) ในภายหลัง
  • ไม่ : เชลล์ที่เรียกใช้จากระยะไกลไม่ได้สืบทอดสภาพแวดล้อม (ดู ... ทำไมเชลล์ระยะไกลผ่าน ssh ไม่สืบทอดสภาพแวดล้อม .. )

หมายเหตุสำหรับการตั้งค่าของเปลือกหอย:

  1. สำหรับการทำงานที่ถูกต้องในเชลล์ท้องถิ่นเป็นสิ่งสำคัญที่จะต้องปิดการใช้งาน/usr/libexec/path_helperเพราะเส้นทางเริ่มต้นใน/etc/pathsอาจเปลี่ยนลำดับของเส้นทางPATHมา **

  2. เพื่อรองรับเชลล์ระยะไกลคุณจำเป็นต้องนำเข้าlaunchdสภาพแวดล้อมเข้าสู่เชลล์อีกครั้ง ใช้สิ่งนี้ในของคุณ.bashrc:

# the vexatious path stuff
eval $(launchctl export)

ผลที่ตามมาของโชคร้ายคือ:

  • ไม่มีวิธีที่จะมีการตั้งค่าแบบรวมเหล่านี้ในแต่ละผู้ใช้ ( ~/.launchd.confใช้งานไม่ได้)
  • ไม่มีวิธีง่ายๆในการสร้าง PATH จากแหล่งข้อมูลต่าง ๆ โดยใช้เทคนิคเช่นการขยายโฮมไดเร็กตอรี่และอื่น ๆ

ปรับปรุง: การตั้งค่าเส้นทางผ่าน/etc/launch.confไม่ได้ทำงานให้กับเปลือกหอยเข้าสู่ระบบจากระยะไกลผ่าน SSH (ผมถือว่าเพราะsshdไม่ผ่านสภาพแวดล้อมของมันสืบทอดมาจากแม่ของมันlaunchdไปยังเปลือกเด็ก.) - ฉันจะแก้ไขคำตอบตามนั้น
halloleo

ตอบรับการปรับปรุงด้วยโซลูชั่นสำหรับเปลือกระยะไกล
halloleo

1
คำตอบที่ดี; คุณสามารถลดความซับซ้อนของการจัดหาสภาพแวดล้อม launchd eval "$(launchctl export)"ดังต่อไปนี้:
mklement0

วิธีง่าย ๆ ในการแก้ไข/etc/launchd.confคือเรียกใช้sudo -e /etc/launchd.conf(ถ้าคุณคุ้นเคยกับ vi) หรือEDITOR=nano sudo -e /etc/launchd.conf(หากคุณต้องการโปรแกรมแก้ไขที่ไม่ใช่คำกริยา)
nohillside

3

ขยายคำตอบก่อนหน้าเพื่อเปลี่ยนเส้นทาง/etc/launchd.confคุณจะต้องทำสิ่งต่อไปนี้

  1. ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์ผู้ดูแลระบบ

  2. สร้างไฟล์ข้อความใหม่ด้วยเนื้อหาต่อไปนี้ซึ่งได้รับการแก้ไขเพื่อให้เหมาะกับความต้องการของคุณ:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. บันทึกไว้ในไดเรกทอรีที่บ้านของคุณlaunchd.confเป็น

  4. เปิด Terminal.app (หรือรายการที่คุณชื่นชอบ) และพิมพ์:

    sudo mv ~/launchd.conf /etc

    ขึ้นอยู่กับการใช้sudoคำสั่งก่อนหน้านี้ของคุณคุณอาจได้รับข้อความสั้น ๆ "ระวังการทำสิ่งที่คุณกำลังทำ" แต่วิธีใดก็ตามที่คุณจะต้องป้อนรหัสผ่านของคุณ คำสั่งทั้งหมดจะย้ายไฟล์ไปยัง/etcไดเรกทอรีซึ่งไม่สามารถเข้าถึงได้โดยตรงเมื่อบันทึกไฟล์ใน TextEdit เป็นต้น sudo(ย่อมาจาก "Super User DO") ถูกใช้เนื่องจากต้องการสิทธิ์ผู้ดูแลระบบในการเขียนไปยังไดเรกทอรีนั้น

  5. รีบูทคอมพิวเตอร์ของคุณ

และคุณควรจะตั้งค่าทั้งหมด โชคดี!


ขอบคุณสำหรับรายละเอียด แต่คำถามไม่ได้เกี่ยวกับวิธีการปรับเปลี่ยนlaunchd.confแต่เกี่ยวกับวิธีที่แอปพลิเคชันทั้งหมดได้รับตัวแปร PATH แบบเดียวกันในแบบรวม
halloleo

ใช่แล้ว แต่แรกเริ่มฉันค้นหาคำถามที่พยายามหาวิธีตั้งค่าPATHแอพ GUI ของฉันและฉันคิดว่าฉันจะช่วยได้ไม่ว่าวิญญาณที่ยากจนจะไม่รู้วิธีการเปลี่ยนแปลง ...
MattDMo

คุณมีจุดที่ถูกต้องที่นี่; ยังฉันคิดว่าการรวมข้อมูลของคุณในคำตอบเป็นตัวเลือกที่ดีกว่า - ฉันคิดว่ากระทู้ความคิดเห็นนี้กลายเป็นการสนทนาเมตาดังนั้นฉันจึงเปิดมันใน meta.stackoverflow ว่าจะทำอย่างไรกับคำตอบเพิ่มเติม ...
halloleo

1
จริง ๆ แล้วสิ่งนี้ไม่ควรอยู่บน meta.apple.stackexchange.com หรือ
MattDMo

อันที่จริง meta.apple.stackexchange.com น่าจะเป็นที่ที่ถูกต้อง ฉันไม่รู้ว่ามันมีอยู่จริง ...
halloleo

-2

คุณสามารถลองhttps://github.com/ersiner/osx-env-sync

จะจัดการบรรทัดคำสั่งทั้งสองและ GUI ปพลิเคชันจากแหล่งเดียว และใช้งานได้กับOS X เวอร์ชันล่าสุด (Yosemite)


ซึ่งเพิ่งตอบโดยอัตโนมัติโดยใช้บิตที่เขาบอกว่าไม่ทำงานเช่น launchctl setenv PATH <... >
user151019

@ Mark ไม่มีส่วนเกี่ยวข้องกับขั้นตอนตอบอัตโนมัติที่นี่ อันนี้ใช้ตัวแทนการเปิดตัว ฉันขอแนะนำให้คุณลองดู
Ersin Er

โซลูชันที่ยอมรับใช้launchdระบบเช่นกัน วิธีการแก้ปัญหาของคุณมีปัญหาเช่นเดียวกับที่ระบุไว้ในคำตอบที่ได้รับการยอมรับ
halloleo

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