วิธีการตั้งค่า PATH สำหรับแอปพลิเคชั่นที่เปิดใช้ Finder


70

ปพลิเคชันเปิดตัวผ่าน Finder .bash_profileดูเหมือนจะไม่เคารพเส้นทางตามที่กำหนดใน ดังนั้นเมื่อฉันพยายามเรียกใช้รหัสจาก IDE (Intellij) ฉันไม่สามารถเข้าถึงโปรแกรมในได้อีกต่อไป/usr/local/binซึ่งโดยปกติจะถูกเพิ่มลงในพา ธ ของฉันในเทอร์มินัล

เห็นได้ชัดว่า.MacOSX/environment.plist เคยเป็นวิธีการทำเช่นนี้ แต่มันไม่ทำงานใน Lion อีกต่อไป

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


คุณแน่ใจหรือว่าโซลูชันที่คุณยอมรับใช้งานได้ใน 10.8?
sorin

1
@SorinSbarnea (ฉันรู้ว่านี่เก่า แต่) ฉันสามารถตรวจสอบได้ว่าคำตอบที่ได้รับการยอมรับในปัจจุบันทำงานได้ดีสำหรับฉันใน OS X 10.8.3 เมื่อฉันยังใช้แฮ็คที่แนะนำการรีสตาร์ท Dockอีกด้วย (ฉันกำลังตั้งค่าตัวแปรสภาพแวดล้อมที่แตกต่างกัน แต่ไม่ใช่$PATHในกรณีที่มีความสำคัญ)
Calrion

ดูเพิ่มเติมได้ที่ < stackoverflow.com/questions/829749/… > มันค่อนข้างซ้ำซ้อน
Philipp Kunz

คำตอบ:


38

หากคุณใช้งาน 10.7 และไม่ใช่ 10.8 โซลูชันด้านล่างใช้งานได้ดี:

ฉันมีปัญหาเดียวกันกับ eclipse แต่ตอนนี้ฉันได้เพิ่มเช่นต่อไปนี้ของฉัน.bash_profileแล้วก็ใช้งานได้

export PATH=some_path:another_path
launchctl setenv PATH $PATH

ในกรณีที่คุณต้องการออกจากเส้นทางเดิมที่ยังคงใช้งานอยู่

p=$(launchctl getenv PATH)
launchctl setenv PATH /my/new/path:$p

แทน (หรือเพียงแค่launchctl setenv PATH /my/new/path:$(launchctl getenv PATH))

หมายเหตุ:การเปลี่ยน launchctl PATH จะไม่มีผลจนกว่า Dock จะ "เริ่มใหม่" กระบวนการ Dock ใหม่จะเริ่มต้นโดยอัตโนมัติหลังจากที่กระบวนการปัจจุบันถูกฆ่าด้วยคำสั่ง:

killall Dock

1
ฉันลงเอยด้วยการใช้: "launchctl setenv PATH $ PATH" การต่อท้ายเส้นทาง Launchctl ที่มีอยู่ผ่าน "$ p" จะเป็นการทำซ้ำเส้นทางในแต่ละครั้งที่คุณเปิดเชลล์
คาเฟอีนโคม่า

4
สิ่งนี้ใช้ไม่ได้กับ OS X 10.8 - พยายามกับ Eclipse และ IntelliJ - การเรียกใช้set|grep PATHจากพวกเขาจะกลับมาเสมอPATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin

1
ใช้งานไม่ได้กับทั้งคู่ของฉัน (10.8.1)
nohillside

4
คุณอาจลองรีสตาร์ทท่าเรือหลังจากทำงาน:launchctl osascript -e 'tell app "Dock" to quit'ที่ดูเหมือนจะแก้ไขได้สำหรับฉัน
Ivan Andrus

2
สิ่งนี้ใช้ได้กับฉันในเวลา 10.12 น. แต่เป็นครั้งเดียวเท่านั้น หลังจากรีสตาร์ทเครื่องเอฟเฟกต์จะหายไป
Dover8

19

เพื่อตอบคำถามของคุณเกี่ยวกับปัญหา 'ใหม่' ของคุณฉันตัดสินใจที่จะเขียนคำตอบอื่น - เพราะง่ายต่อการอธิบายด้วยตัวอย่าง

วิธีหนึ่งในการโหลดตัวแปรสภาพแวดล้อมในการเริ่มต้นเครื่องมือ (IDE) ที่คุณเลือกก็คือสามารถทำได้ด้วย eclipse - ฉันคิดว่าต้องมีโครงสร้างที่คล้ายกันในเครื่องมือ (IDE) ของคุณด้วย

วิธีสามารถทำได้ใน eclipse - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(เขียนใหม่เกี่ยวกับตัวแปรสภาพแวดล้อมเล็กน้อย)

สร้างไฟล์ข้อความเปล่าที่ชื่อ "eclipse.sh" ในไดเร็กทอรีบันเดิลของแอ็พพลิเคชัน Eclipse /Applications/eclipse/Eclipse.app/Contents/MacOS

เปิด eclipse.sh ในเท็กซ์เอดิเตอร์และป้อนเนื้อหาต่อไปนี้:

#!/bin/sh

. ~/.bash_profile

logger "`dirname \"$0\"`/eclipse"

exec "`dirname \"$0\"`/eclipse" $@

ใน Terminal ให้ตั้งค่าสถานะที่สามารถเรียกใช้งานได้ของเชลล์สคริปต์ eclipse.sh เช่น:

chmod +x /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.sh

เปิด Eclipse.app Info.plist และเปลี่ยนค่าสำหรับคีย์ CFBundleExecutable จาก eclipse เป็น eclipse.sh

MacOS X ไม่ตรวจพบว่า Info.plist ของ Eclipse.app เปลี่ยนไปโดยอัตโนมัติ ดังนั้นคุณต้องบังคับให้อัพเดตฐานข้อมูล LaunchService ในเทอร์มินัลโดยใช้คำสั่ง lsregister:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app

ครั้งต่อไปที่คุณเรียกใช้ Eclipse.app จาก Dock หรือจาก Finder ควรปรับตั้งตัวแปรสภาพแวดล้อม


+1 สำหรับคำอธิบายที่ชัดเจนและแม่นยำและสำหรับข้อเท็จจริงที่ว่ากว่าหกปีต่อมาสิ่งนี้ยังคงใช้ได้กับ High Sierra, 10.13.x
dgnuff

16

ใน OS X 10.10 Yosemite ฉันใช้คำสั่งนี้:

sudo launchctl config user path <my path setting>

โปรดทราบว่าชุดของเขา PATH launchtl สำหรับผู้ใช้ทุกคน สิ่งนี้ใช้ได้ดีสำหรับกรณีการใช้งานของฉัน โปรดทราบว่าคุณจะถูกขอให้รีบูตเครื่องของคุณเพื่อให้เอฟเฟกต์หยุดการทำงาน


ดูเหมือนจะไม่มีผลกับตัวแปรสภาพแวดล้อม PATH ของแอปพลิเคชั่นที่เปิดใหม่เมื่อเข้าสู่ระบบ (ที่เปิดเมื่อปิดระบบ)
Brecht Machiels

4
คำตอบนี้ใช้ได้สำหรับฉัน โดยเฉพาะในการเข้าถึงปฏิบัติการที่จัดการโดย Brew ฉันต้องsudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinรีบูต
JP

นี่คือคำตอบที่ดีที่สุดสำหรับการเพิ่ม / usr / local / bin สำหรับแอปพลิเคชันที่ใช้ Homebrew คนโปรดโหวตคำตอบนี้ขึ้น! มันทำงานใน 10.11 และ 10.12 เช่นกัน (ไม่ได้ทดสอบใน 10.13 ตัวเอง) ไม่จำเป็นต้องยุ่งกับenvironment.plistในกรณีส่วนใหญ่
Mark Edington

สิ่งนี้ใช้ได้กับฉันในขณะที่คำตอบที่ยอมรับไม่ได้
MichaelChirico

11

บนภูเขาสิงโตทั้งหมด/etc/pathsและ/etc/launchd.confการแก้ไขจะไม่มีผลใด ๆ !

ฟอรัมนักพัฒนาของ Apple พูดว่า:

"เปลี่ยน Info.plist ของ. app เองเพื่อให้มีพจนานุกรม" LSEnvironment "พร้อมตัวแปรสภาพแวดล้อมที่คุณต้องการ

~ / .MacOSX / environment.plist ไม่รองรับอีกต่อไป "

ดังนั้นฉันจึงแก้ไขแอพโดยตรงInfo.plist(คลิกขวาที่ "AppName.app" (ในกรณีนี้คือ SourceTree) จากนั้น " Show package contents")

แสดงเนื้อหาของแพ็คเกจ

และเพิ่มคู่คีย์ / dict ใหม่ที่เรียกว่า:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(ดู: LaunchServicesKeys Documentation ที่ Apple )

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้แอพ (ในกรณีของฉัน SourceTree) ใช้เส้นทางที่กำหนดและทำงานกับ git 1.9.3 :-)

PS: แน่นอนคุณต้องปรับรายการเส้นทางให้ตรงกับเส้นทางที่คุณต้องการ


มันเป็นเรื่องจริงเหรอ? ฉันเห็นโพสต์จำนวนมากที่มีข้อมูลที่ขัดแย้งกันซึ่งบางโพสต์นั้นเก่าชัดเจน แต่บางโพสต์ดูเหมือนว่าเร็ว ๆ นี้ ฉันยังไม่มี (ใน 10.8.2) /etc/launchd.confต่อไป สันนิษฐานแม้ว่ากฎไม่ได้ระบุว่าปพลิเคชันควรใช้ไฟล์ Info.plist ของพวกเขาสำหรับเส้นทางที่พวกเขาจะยังคงใช้ไฟล์อื่น ๆ - /etc/launchd.conf, /etc/paths/หรือ/etc/paths.d/*, หรือ `~ / .MacOSX / environment.plist ในทางปฏิบัติแล้วปลอดภัยหรือไม่ที่จะบอกว่าในทางปฏิบัติเส้นทางสำหรับแอพ GUI ใน Mountain Lion สามารถตั้งค่าในไฟล์ใด ๆ เหล่านี้ได้หรือไม่?
orome

2
Info.plist นี้เป็นสิ่งเดียวที่ทำงานให้ฉันหลังจากลอง lauchd.conf ฯลฯ / พา ธ ฯลฯ ด้วย Maverics และ eclipse ของฉัน ที่จริงแล้วสิ่งนี้ไม่ได้ผลทันทีคุณต้องจำสองสิ่ง: 1. เรียกใช้/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appตามคำตอบอื่นหลังจากเปลี่ยน plist และ 2. เพิ่มพา ธ แบบเต็มนั่นคุณไม่สามารถใช้ PATH ที่มีอยู่เช่นเดียวกับในโปรไฟล์สคริปต์ของคุณ
JaakL

สิ่งนี้ใช้ได้กับ Sierra (10.12) แต่ก็ยังจำเป็นต้องเรียกใช้lsregisterคำสั่งตามที่ระบุไว้โดย @JaakL
Alastair Harrison

1

On Mountain Lion (10.8.4) $PATHได้รับการปฏิบัติเป็นพิเศษ launchctl setenv PATH /your/path:/hereไม่มีผลกระทบใด ๆ ต่อ$PATHอินสแตนซ์ใน Terminal.app หรือ Emacs.app ที่เปิดตัวจาก Dock หรือจาก Finder (ในขณะที่ใช้launchctl setenv SPONG fooงานได้ดี) ยัง$HOME/.launchd.confใช้งานไม่ได้ /etc/launchd.confเป็นวิธีเดียวที่ฉันได้พบว่าได้รับการตั้งค่าเส้นทางอย่างถูกต้องทุกที่ แต่น่าเสียดายที่ไม่สามารถใช้ envars เช่น$HOMEนั้นเพื่อให้ผู้ใช้ทั้งหมดที่อยู่ในแล็ปท็อปของฉันมีของพวกเขา/Users/nb/bin $PATHนั่นเป็นเพียงฉันดังนั้นฉันไม่สนใจ


คุณจะพบว่ากระบวนการเทอร์มิหยิบPATHค่าที่คุณตั้ง แต่เมื่อคุณสร้างอาคารผู้โดยสารแห่งใหม่ที่จะเริ่มเข้าสู่ระบบเปลือกซึ่งถ้าคุณใช้ทุบตีรัน/etc/profileซึ่งเริ่มต้นค่าที่ส่งกลับจากPATH /usr/libexec/path_helperหากคุณเลือกเชลล์> คำสั่งใหม่ ...และเรียกใช้env(ไม่ใช่ในเชลล์) คุณควรพบว่าPATHเป็นค่าที่คุณตั้งค่าผ่านทาง launchd
Chris หน้า

-1

ลองตั้งค่าพา ธ ใน ~ / .profile หรือ ~ / .bash_profile หรือ ~ / .zprofile (สำหรับ zsh) สิ่งนี้ใช้ได้กับฉันด้วย VimR - มันไม่ได้อ่าน PATH เมื่อเปิดตัวจากท่าเรือ แต่ทำงานได้เมื่อเปิดจากเทอร์มินัล ฉันใช้ OSX 10.11 อยู่ดี

ฉันไม่มีความสามารถพอที่จะอธิบายให้คุณฟังได้ว่าทำไมมันถึงได้ผลมีคำอธิบายมากมายเกี่ยวกับไฟล์กำหนดค่าต่างๆทางออนไลน์และสิ่งที่พวกเขาทำ: https://stackoverflow.com/questions/415403/ อะไรที่แตกต่างระหว่าง bashrc-ทุบตีรายละเอียดและสภาพแวดล้อม

นอกจากนี้ดูการสนทนาที่คล้ายกันที่นี่: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893


คำถามถามว่าจะทำอย่างไรกับแอพที่เปิดตัวจาก Doc ซึ่งเหมือนกับการเปิดตัวจาก Finder ซึ่งคุณบอกว่าคำตอบของคุณไม่ทำงาน - และเราสามารถอธิบายได้อย่างชัดเจนว่าทำไมมันถึงไม่ทำงาน
user151019

-3

บน Mac OS X 10.8.4 Mountain Lion สภาพแวดล้อมของพา ธ จะรวมพา ธ ที่ระบุไว้ในไฟล์นี้:

/etc/paths

คุณสามารถแก้ไขไฟล์นี้โดยใช้เครื่องมือบรรทัดคำสั่งเช่นการvimใช้คำสั่งต่อไปนี้:

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