ฉันจะตั้งค่าตัวแปรสภาพแวดล้อม PATH ทั่วโลกบน OS X ได้อย่างไร


101

ฉันต้องการผนวกตัวแปรสภาพแวดล้อม PATH ทั่วโลกใน OS X เพื่อให้เชลล์ผู้ใช้และแอปพลิเคชัน GUI ได้รับสภาพแวดล้อม PATH เดียวกัน

ฉันรู้ว่าฉันสามารถผนวกเส้นทางในสคริปต์เริ่มต้นเชลล์ แต่การตั้งค่าเหล่านั้นไม่ได้รับมรดกโดยแอปพลิเคชัน GUI

วิธีเดียวที่ฉันพบคือการกำหนดตัวแปรสภาพแวดล้อมของเส้นทางใหม่ใน/etc/launchd.conf :

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

ฉันไม่สามารถหาวิธีที่จะผนวกเข้ากับ PATH ในความเป็นlaunchd.confจริงได้

ฉันกังวลเล็กน้อยเกี่ยวกับวิธีการนี้ แต่จนถึงตอนนี้เป็นสิ่งเดียวที่ทำงานได้ มีวิธีที่ดีกว่า?



2
สำหรับโยเซมิตีและใหม่กว่าโปรดดูstackoverflow.com/questions/25385934/…
thSoft

ไม่มีคำตอบที่นี่ตอบคำถามของ OP แต่ความคิดเห็นที่นี่โดย thSoft ถูกต้องกับเงิน! อาจรวมหรือเชื่อมโยงกับคำถามที่อ้างถึงนี้: stackoverflow.com/questions/25385934/…
Kevin Buchs

คำตอบ:


71

ข้อมูล GUI ของพาลเมอร์นั้นถูกต้อง แต่มีวิธีบำรุงรักษาเพิ่มเติมเพื่อแก้ไขพา ธ ที่เห็นโดยเชลล์ เช่นเดียวกับmediaslave ที่บอกว่าคุณสามารถแก้ไข/etc/pathsได้ แต่ยิ่งดีกว่าคุณสามารถวางไฟล์ข้อความ/etc/paths.d/ที่มีพา ธ และเชลล์ทั้งหมดจะสร้างพา ธ ได้อย่างถูกต้อง

ตัวอย่างเช่นในระบบของฉัน:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

1
ดีมากขอบคุณ! หมายเหตุ: คุณต้องออกจากระบบและเข้าสู่ระบบก่อนที่จะทำงาน
weronika

@weronika: ฉันพบว่าเพียงพอที่จะออกและเปิดใช้งานอีกครั้งX11(เจ็บปวดน้อยกว่าการออกจากระบบโดยสิ้นเชิง) Terminalผมไม่ได้ลองใน
Peter Gluck

ฉันอ้างถึง Terminal - คุณพูดถูกฉันลืมระบุ
weronika

8
เป็นการดีที่จะรู้ แต่ไม่ตอบคำถามของ OP เนื่องจากกลไกนี้ใช้ไม่ได้กับแอพ GUI สหกรณ์ได้รับการมองหาแบบครบวงจรโซลูชั่นที่จะช่วยให้เขาผนวก$PATHที่จะเริ่มต้น
mklement

"ระบบของฉัน" คุณหมายถึงอะไรที่นี่ @cogg? เราทุกคนไม่ได้ใช้ OS X ที่นี่หรือ ขออภัย แต่ฉันยังใหม่กับ OS X ฉันใช้ OS X 10.7
ericn

48

/etc/launchd.conf

launchd.confไฟล์ ** โซลูชั่นที่สมบูรณ์เท่านั้นที่จะทำงานให้ทั้งสองบรรทัดคำสั่งและ GUI ใช้งานบนOS X v10.8 (Mountain Lion) และv10.9 (Mavericks) หนึ่งที่จะทำงานกับ GUI และคอนโซลการใช้งานสำหรับผู้ใช้ทั้งหมด .

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

เพิ่ม

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

ในตัวอย่างด้านบนฉันเพิ่มลง/usr/local/binในค่าสภาพแวดล้อมเริ่มต้นสำหรับ PATH

โปรดทราบว่าไฟล์นี้ไม่ใช่สคริปต์และคุณไม่มีตัวเลือกในการใช้การแทนที่ นอกจากนี้หากต้องการใช้สิ่งเหล่านี้คุณต้องรีบูต

โปรดจำไว้ว่าคนอื่น ๆ ทั้งหมดเป็นเพียงการแก้ปัญหาบางส่วน:

  • environment.plist ไม่ทำงานสำหรับแอปพลิเคชั่นที่เปิดใช้ผ่าน Spotlight
  • /etc/paths - สำหรับคอนโซลเท่านั้น
  • /etc/csh.cshrcหรือ/etc/bashrc- สำหรับหอยบางตัวเท่านั้น

คำตอบนี้จะขึ้นอยู่กับคำถามเดียวกันจากการตั้งค่าตัวแปรสภาพแวดล้อมบน Mac OS X


7
การค้นพบที่ยอดเยี่ยม แต่คำถามได้พูดคุยเกี่ยวกับการเปิดตัวและกำลังถามถึงวิธีการต่อท้ายเส้นทางในนั้น
cregox

21
คุณเพิ่มความคิดเห็นในคำถามต้นฉบับที่ชี้ให้คุณเห็นว่าเป็น "คำตอบจริง" หรือไม่?
TJ Luoma

7
มันบอกเป็นนัยโดยคำตอบของคุณ - เป็นประโยชน์ - แต่เพื่อที่จะสะกดมัน: ความปรารถนาของ OP ที่จะผนวกเข้ากับพา ธ เริ่มต้นไม่ได้รับการสนับสนุนเพราะคุณไม่สามารถอ้างอิงตัวแปรสภาพแวดล้อมอื่น ๆ/etc/launchd.confได้
mklement

ไม่ใช่โลก - สภาพแวดล้อมบรรทัดคำสั่งจะยกเลิกสิ่งนี้เมื่อ / etc / profile เรียก path_helper และสร้าง PATH จาก / etc / path และ /etc/paths.d/
Dave X

1
ตามapple.stackexchange.com/questions/106355/ …สิ่งนี้ใช้ไม่ได้กับโยเซมิตีหรือใหม่กว่า
ericn

7

คุณจะต้องตั้งค่าเป็นแบบเชลล์ต่อเชลล์ Bash และ csh-like shells ไม่แชร์ไฟล์การกำหนดค่าและไวยากรณ์เดียวกันสำหรับการปรับ PATH

การพยายามทำสิ่งนี้launchctlจะไม่ทำงานเนื่องจากตัวแปรสภาพแวดล้อมถูกตั้งค่าไว้ในการเข้าสู่ระบบ ไม่มีความกว้างของระบบใน Unix นอกเชลล์เซสชัน

ดังนั้นคุณจะต้องการเพิ่ม

setenv PATH "$PATH:/add/my/extra/path"

ถึง/etc/csh.cshrcและ

export PATH="$PATH:/more/paths:/

/etc/bashrcไปยัง

หากคุณต้องการตัวแปรสภาพแวดล้อมในแอปพลิเคชัน GUI นั่นซับซ้อนกว่า คุณต้องสร้าง.MacOSX/environment.plistไฟล์ในโฮมไดเร็กตอรี่ของผู้ใช้แต่ละคน .MacOSXไดเรกทอรีจะไม่ได้อยู่โดยค่าเริ่มต้นดังนั้นคุณจะต้องสร้างมันขึ้นมา

รูปแบบของไฟล์เป็นดังนี้:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

เพิ่มเติมเกี่ยวกับที่อยู่บนเว็บไซต์ของแอปเปิ้ลenvironment.plist


แต่การตั้งค่าจะมีผลเมื่อตั้งค่าใน /etc/launchd.conf ... Hmmm ... / me สับสน
Xerxes

จริงๆ? คุณตั้งค่าตัวแปรสภาพแวดล้อมใด
พาลเมอร์

1
เพียงแค่อัปเดตตั้งแต่ OS X 10.8: ~/.MacOSX/environment.plistวิธีนี้ไม่ได้รับการสนับสนุนอีกต่อไปและไม่มีการทดแทนในระดับผู้ใช้ ทั้งระบบคุณสามารถใช้/etc/launchd.conf(และมีโซลูชันแอป * - ต่อ)
mklement

ไม่ตอบคำถามของ OP
Kevin Buchs

3

คุณสามารถแก้ไขเส้นทางทั่วโลกของคุณโดยเพิ่มบรรทัดไปที่/etc/pathsหนึ่งเส้นทางต่อบรรทัด

sudo nano /etc/paths ควรพาคุณไปที่นั่น


2
เป็นการดีที่จะรู้ แต่ไม่ตอบคำถามของ OP เนื่องจากกลไกนี้ใช้ไม่ได้กับแอป GUI
mklement


1

ผมไม่แน่ใจว่าถ้าใครได้รับการคุ้มครองที่ง่ายที่สุดและมากที่สุดที่สง่างามทาง อย่างน้อยบนMac OS X v10.6 (Snow Leopard)

ล้อเล่นกับ[/etc/|~/.]ของ[profile|bashrc]ไฟล์อาจทำงาน แต่มันค่อนข้างสับ /etc/paths.d/ไดเรกทอรีเป็นวิธีที่จะไป:

  • Sudo เป็นบรรณาธิการที่คุณชื่นชอบ
  • สร้างไฟล์ใหม่ที่ชื่อว่า*name*(อย่าตั้งชื่อไฟล์ที่มีอยู่ในนั้น) /etc/paths.d/ด้วยพา ธ ต่อบรรทัด:

    /usr/X11/bin
    /Developer/usr/bin
    
  • จากนั้นเพิ่ม

    eval '/usr/libexec/path_helper -s`
    

    ไปprofileหรือbashrcและคุณควรจะไปดี


1
เป็นการดีที่จะรู้ แต่ไม่ตอบคำถามของ OP เนื่องจากกลไกนี้ใช้ไม่ได้กับแอป GUI
mklement

เป็นชื่อไฟล์อย่างแท้จริง*name*? หรือคุณหมายถึงแค่name?
Peter Mortensen

0

ฉันไม่แน่ใจว่า launchd ยอมรับสิ่งนี้หรือไม่ แต่ลอง:

setenv PATH "$ PATH: / my / path"

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

0

ฉันไม่แน่ใจว่าทำไมคุณถึงใช้/etc/launchd.confแทน/etc/profile- แต่ฉันไม่มีผู้เชี่ยวชาญใน Mac OS X - ฉันเชื่อว่าคุณแน่ใจว่าทำงานได้ดี แต่launchdเป็นการใช้งาน / ทดแทน Mac OS X สำหรับinit- Mac OS X ทำให้ฉันงง

อย่างไรก็ตามsetenv PATH "$PATH:/more/paths:/and/more/paths"จะใช้งานได้ (tcsh) และ bourn shell ที่เทียบเท่าคือexport PATH="$PATH:/more/paths:/and/more/paths"- ฉันไม่รู้ว่าlaunchdเกี่ยวข้องกับเชลล์ใดเชลล์หนึ่งอย่างไร

ฉันคิดว่าฉันถามคำถามเพิ่มเติมแล้วฉันตอบ =)


4
/ etc / การตั้งค่าเส้นทางโปรไฟล์ไม่สามารถมองเห็นได้โดยแอป OS X GUI ใด ๆ ที่ใช้กับทุบตีเท่านั้น ฉันต้องการให้แอปพลิเคชันทั้งหมดได้รับการตั้งค่าเส้นทางใหม่
lajos

1
Unix? แน่นอนว่ามันคือยูนิกซ์ ฉันหมายถึง sorta ใช่เราทำลายสิ่งที่ใช้งานมา 30 ปีแล้ว แต่ก็ยังคง unix! / ถอนหายใจ
Matt Simmons
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.