ฉันมีปัญหาที่ทำซ้ำได้:
- ตั้งค่าเส้นทางของฉันใน Bash. profile
- เริ่มต้นโดย tmux
tmux
,tmux attach
หรือตัวแปรใด ๆ - echo $ PATH และดูด้วยส่วนประกอบเดียวกัน แต่เรียงตามลำดับที่แตกต่างกัน
จะหยุดสิ่งนี้ได้อย่างไร มันอธิบายอะไร
ฉันมีปัญหาที่ทำซ้ำได้:
tmux
, tmux attach
หรือตัวแปรใด ๆจะหยุดสิ่งนี้ได้อย่างไร มันอธิบายอะไร
คำตอบ:
หากคุณใช้งานบน Mac และสงสัยว่าทำไมจึงถูกเตรียม/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
การไว้ใน PATH เมื่อคุณเรียกใช้ tmux นั่นเป็นเพราะยูทิลิตี้ที่ชื่อ path_helper ที่เรียกใช้จาก/etc/profile
ไฟล์ของคุณ
คุณไม่สามารถชักชวน tmux ได้อย่างง่ายดาย (หรือมากกว่า, ทุบตี) ไม่ใช่แหล่งที่มา/etc/profile
(ด้วยเหตุผลบางอย่าง tmux จะทำงานเป็นล็อกอินเชลล์เสมอ, ซึ่งหมายถึง / etc / โปรไฟล์จะถูกอ่าน) แต่คุณสามารถมั่นใจได้ว่าผลกระทบของ path_helper don ขันกับเส้นทางของคุณ
เคล็ดลับคือการทำให้แน่ใจว่า PATH นั้นว่างเปล่าก่อนที่ path_helper จะทำงาน ใน~/.bash_profile
ไฟล์ของฉันฉันมีสิ่งนี้:
if [ -f /etc/profile ]; then
PATH=""
source /etc/profile
fi
ล้างเส้นทางก่อนที่จะรัน path_helper จะป้องกันไม่ให้มันจาก prepending เส้นทางเริ่มต้นที่เส้นทางของคุณ (ก่อนหน้านี้) เลือกและจะช่วยให้ส่วนที่เหลือของการติดตั้งสคริปต์ทุบตีส่วนบุคคลของคุณ (คำสั่งต่อไปลง.bash_profile
หรือใน.bashrc
กรณีที่คุณได้มาจาก.bash_profile
) เพื่อตั้งค่าของคุณ เส้นทางตาม
หวังว่าจะทำให้รู้สึก ...
-f
ด้วยความสะดวกสบาย-e
แต่ฉันจะไม่ลองและแหล่งที่มาของไฟล์จากสคริปต์ที่ได้รับการทำงานเมื่อฉันเข้าสู่ระบบเว้นแต่ฉันจะตรวจสอบว่ามันอยู่ที่นั่น ฉันมักจะใช้สคริปต์ทุบตีของฉันอีกครั้งในเครื่องต่าง ๆ (และระบบปฏิบัติการ) จำนวนมากดังนั้นฉันจึงต้องการตรวจสอบให้แน่ใจว่าพวกเขากำลังกันกระสุน ฉันนึกภาพออกมาว่ายูนิกซ์บางตัวอาจเรียกมันว่าอย่างอื่น
ไม่มี การเรียงลำดับ$PATH
จะเป็นสิ่งที่บ้าเกินกว่าที่จะทำเนื่องจากหลาย ๆ ระบบขึ้นอยู่กับคำสั่งของผู้ใช้
อย่างไรก็ตาม tmux ไม่เริ่มต้นเปลือกของคุณในโหมด "เข้าสู่ระบบ" ที่ก่อให้เกิด~/.profile
ที่จะมาอีกครั้ง ซึ่งหมายความว่าหากคุณมีสิ่งที่ต้องการPATH=/my/dir:/another/dir:$PATH
ในแฟ้มที่จะทำอีกครั้งส่งผลให้ใน $ PATH /my/dir:/another/dir:/my/dir:/another/dir:(etc.)
มี เพื่อหลีกเลี่ยงปัญหานี้คุณสามารถใช้ตัวแปรอื่นเพื่อตรวจสอบ:
if [ "$_SKIP_PROFILE" ]; then
return 0
else
export _SKIP_PROFILE=y
fi
export PATH="/my/dir:/another/dir:$PATH"
@ Graham Ashton ขอบคุณสำหรับความคิดของคุณ
ข้อเสนอแนะของฉันจะเป็นที่คุณใส่
if [ -f /etc/profile ]; then
PATH=""
source /etc/profile
fi
ที่ไฟล์. zshrc ของคุณที่ด้านบนสุด
ทำให้แน่ใจว่าของคุณ
export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"
อยู่ด้านล่าง
if [ -n "$TMUX" ]
ประโยคด้วยตัวเอง แต่ฉันสงสัยว่ามันสำคัญ[ -f /etc/profile ]
แค่ไหน? การถือว่า/etc/profile
เป็นไฟล์ปกติหรือไม่ปลอดภัยหรือไม่