$ PATH กำลังทำให้ฉันบ้า


10

ตกลงขอโทษถ้านี่เป็นสิ่งที่โง่ แต่ฉันหมดความคิด

ประตู:ย่อหน้า/usr/local/binไป$PATH

ปัญหา: $PATHจะไม่ทำสิ่งที่ฉันต้องการหรือคาดหวัง

ฉันมาที่นี่ได้อย่างไร:ฉันต้องการเริ่มเรียนรู้ที่จะเขียนโปรแกรมดังนั้นฉันจึงรู้สึกสบายใจเมื่อต้องอยู่ภายใต้กระโปรงหน้ารถ แต่ไม่มีประสบการณ์มากมาย ฉันติดตั้งfishเชลล์ (เพราะเป็นมิตร!) โดยใช้homebrewและตั้งเป็นเชลล์เริ่มต้น (ใต้system prefs>users & groups>advanced) เมื่อถึงจุดหนึ่งฉันวิ่งbrew doctorไปดูว่าการติดตั้งของฉันเป็นโคเชอร์ทั้งหมดหรือไม่และแนะนำให้ฉันย้าย/usr/local/binไปที่ด้านหน้า$PATHเพื่อให้ฉันสามารถใช้การติดตั้งgitแทนการคัดลอกระบบได้ ไม่เป็นไร - แต่ระหว่างpath_helperและfishมีบางสิ่งเกิดขึ้นกับสิ่ง$PATHที่อยู่นอกเหนือการควบคุมของฉันและฉันไม่สามารถหาเส้นทางที่ถูกต้องในวิธีที่ถูกต้อง

สิ่งแวดล้อม: OSX 10.8.2 อัพเกรดจาก 10.7ish ด้วยxcodeและติดตั้ง devtools บวกx11, homebrewและfish

ข้อมูลเพิ่มเติม:ฉันได้ตั้งเริ่มต้นเปลือกกลับของผู้ใช้ไปbashและพยายามที่ความหลากหลายของเปลือกหอยผ่านterminal.app- bash, ,fish shฉันย้าย/usr/local/binไปที่ด้านบนสุด/etc/pathsแต่ก็ไม่ได้เปลี่ยนแปลงอะไรเลย ฉันดูผ่านconfig.fishไฟล์ต่าง ๆและแสดงความคิดเห็นสิ่งที่อาจยุ่งกับ $ PATH ไม่ได้ช่วย ฉันมีไฟล์ต่อไปนี้ใน/etc/paths.d/:

./10-homebrew มี /usr/local/bin

./20-fish มี /usr/local/Cellar/fish/1.23.1/bin

./40-XQuartz มี /opt/X11/bin

ฉันเพิ่มset +xของฉันprofileและเมื่อฉันเริ่มterminal.appฉันได้รับ:

Last login: Mon Oct  1 13:31:06 on ttys000
+ '[' -x /usr/libexec/path_helper ']'
+ eval '/usr/libexec/path_helper -s'
++ /usr/libexec/path_helper -s PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/fish/1.23.1/bin:/opt/X11/bin";
export PATH;
+ '[' /bin/bash '!=' no ']'
+ '[' -r /etc/bashrc ']'
+ . /etc/bashrc
++ '[' -z '\s-\v\$ ' ']'
++ PS1='\h:\W \u\$ '
++ shopt -s checkwinsize
++ '[' Apple_Terminal == Apple_Terminal ']'
++ '[' -z '' ']'
++ PROMPT_COMMAND='update_terminal_cwd; '
++ update_terminal_cwd
++ local 'SEARCH= '
++ local REPLACE=%20
++ local PWD_URL=file://Chriss-iMac.local/Users/c4
++ printf '\e]7;%s\a' file://Chriss-iMac.local/Users/c4 
Chriss-iMac:~ c4$

ดังนั้นดูเหมือนว่า path_helper วิ่ง แต่แล้ววิ่งมุ้งฉันecho $PATH /usr/bin:/bin:/usr/sbin:/sbinดังนั้นดูเหมือนว่าpath_helperจะไม่ได้ทำในสิ่งที่ควรจะเป็นอีกต่อไปใช่ไหม

ฉันแน่ใจว่ามีบางพฤติกรรมที่ชัดเจนที่นี่ที่ฉันไม่เข้าใจหรือฉัน borked บางสิ่งบางอย่างในขณะที่พยายามที่จะแก้ไข กรุณาช่วย!


โปรดทราบฉันสามารถทำให้มันทำงานได้fishโดยการสร้าง~/.config/fish/config.fishด้วยset PATH /usr/local/bin $PATHแต่ฉันยังคงมีปัญหาที่path_helperเห็นได้ชัดว่าไม่ทำงานอย่างที่ควรจะเป็นและ$PATHไม่สมบูรณ์ ยังมีปัญหาที่แตกต่างกัน$PATHสำหรับสคริปต์, แอพที่เริ่มต้นจาก GUI, เป็นต้น
Chris4d

คำตอบ:


5

สารละลาย:

เลือกหากคุณต้องการการตั้งค่าทั้งระบบหรือกำหนดค่าผู้ใช้และแก้ไขไฟล์การกำหนดค่าที่เหมาะสมอย่าใช้ path_helper กับปลา

มากกว่า

fish ไม่ได้มา / etc / profile, สำหรับทั้งระบบและผู้ใช้ config มันจะอ่าน /etc/fish/config.fish และ ~ / .config / fish / config.fish ตามลำดับ [1]

path_helper มีจุดประสงค์เพื่อใช้สำหรับเชลล์ที่ซอร์สไฟล์โปรไฟล์ทั้งระบบ (sh, csh และอนุพันธ์ของพวกเขา) เนื่องจาก 10.7 path_helper ดูเหมือนจะให้เกียรติคำสั่งใน / etc / path AFAIR มันไม่ได้อยู่ใน 10.6 และยากต่อการจัดการ

หากคุณต้องการใช้ path_helper กับปลาคุณจะต้องแยกวิเคราะห์เอาต์พุตเนื่องจากจะให้เฉพาะไวยากรณ์ sh และ csh พร้อมกับตัวเลือก-sและ-c

สิ่งที่ต้องการ

/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g'

ควรทำงาน:

[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization


ที่ดี! นี่คือสิ่งที่ฉันมีตอนนี้: if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end- ทำงานได้ดีที่นี่กับปลา 2 และ Mac OS 10.8.3
topskip

3

ฉันไม่มีความคิดจริง ๆ เกี่ยวกับ /etc/paths.d, path_helper, & c. ซึ่งทั้งหมดดูเหมือนว่าจะซับซ้อนกว่าสำหรับฉัน แต่ต่อไปนี้ในตอนท้ายของ ~ / .bashrc ของคุณควรจะทำให้คุณถูกต้อง:

 PATH=/usr/local/bin:$PATH

หวังว่านี่จะช่วยได้!


ขอบคุณอาโรน - path_helperเป็นสาธารณูปโภค OSX เฉพาะที่คาดคะเนชุด$PATHที่เข้าสู่ระบบโดยการอ่านจากแล้ว/etc/paths /etc/paths.d/*อย่างไรก็ตามฉันเข้าใจว่าข้อเสนอแนะของคุณควรแก้ไขให้ฉันbashแต่ฉันต้องการให้มันทำงานจริง ๆfish(และทั่วทั้งระบบอย่างสม่ำเสมอหากนั่นไม่มากเกินคาด)
Chris4d

อ่า - ขอโทษด้วย ฉันไม่ได้เป็นผู้ใช้ OS X ตัวเองมากขึ้นสงสาร แต่จากบิตของ Google ทุบตีดูเหมือนว่านี้คำถามกองมากเกินอาจจะมีมากขึ้นเช่นสิ่งที่คุณกำลังหลัง - ที่กล่าวว่าอีกครั้งฉันไม่ ผู้ใช้ OS X ด้วยตัวเองและตอบกลับเพราะดูอย่างรวดเร็ว (อ่าน: สะเพร่า) ที่คำถามของคุณทำให้ฉันคิดว่าคุณสนใจทุบตีเท่านั้นดังนั้นขอคำแนะนำจากที่นี่ด้วยเกลือหลายเม็ด หวังว่ามันจะช่วยได้เหมือนกัน -
Aaron Miller

3

ขอบคุณ Aaron ที่ตอบสนองและสำหรับทุกคนที่ตอบคำถามที่คล้ายกันอื่น ๆ บนไซต์ stackexchange เพื่อลูกหลานของฉันนี่คือสิ่งที่ฉันคิดออก:

  1. path_helperถูกเรียกใช้จาก/etc/profileโดยไวยากรณ์eval '/usr/libexec/path_helper -s'(โดยที่ apostrophes เป็น backticks จริง ๆ ) เหมือนหุ่นฉันไม่รู้ว่า backticks ทำงานอย่างไรและเปลี่ยนมันเป็นคำพูดด้วยเหตุผลบางอย่าง นี้ยากจนของฉันจากการโหลดprofile path_helperแทนที่เห็บหลังและตอนนี้ก็ใช้งานได้ตามที่ควร (แน่นอน)
  2. ใช้set PATH /usr/local/bin $PATHในของฉัน~/.config/fish/profile.fishเพื่อให้แน่ใจว่าฉันได้รับคำสั่งที่ถูกต้องในเปลือกที่ต้องการของฉัน แต่ตราบใดที่path_helperมันอาจจะซ้ำ
  3. เพื่อให้มั่นใจว่า$PATHสคริปต์ทั้งหมดนั้นสามารถใช้งานได้กับแอป GUI และอื่น ๆ ดูเหมือนว่าจะเป็นการโยนระหว่างlaunchd.confและenvironment.plist... ยังคงทำการค้นคว้าอยู่

1
ฉันอ่านเมื่อวันก่อน (แต่ฉันไม่จำแหล่งที่มา) ว่า 10.8 ไม่มีวิธีที่แน่นอนในการหาเส้นทางของแอพทั้งหมด ฉันจำได้เป็นพิเศษว่า environment.plist จะไม่อ่านอีกต่อไป ฉันรู้ตัวถึง launchd.conf ซึ่งอาจใช้ได้ แต่ฉันคิดว่าบทความแนะนำว่าจะไม่เกิดขึ้น
echristopherson

1
การติดตามที่มากขึ้น: ดูเหมือนว่า path_helper จะทำงานได้ไม่ดีในปลา มันจะส่งออกทั้ง csh หรือไวยากรณ์ bash ซึ่งทั้งสองอย่างเข้ากันไม่ได้ แต่คุณสามารถใช้ ~ / .config / fish / config.fish (สคริปต์เริ่มทำงานของปลา) เพื่อ cat /etc/paths.d/* และผนวกเข้ากับ $ PATH หวังว่าจะช่วยให้ใครบางคน!
Chris4d

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