มีวิธีการเพิ่มไดเรกทอรีไปยัง PATH ของฉันเป็น zsh หากยังไม่มีอยู่หรือไม่?


15

มีวิธีง่ายๆในการ zsh เพื่อเพิ่มไดเรกทอรีไปยังเส้นทางของฉันเท่านั้นหากมันไม่ได้มีอยู่แล้ว? (หรือโดยทั่วไปตัวแปรสภาพแวดล้อมใด ๆ ) ฉันได้พยายาม:

PATH+=/my/directory

... แต่ถ้าถูกดำเนินการสองครั้งระบบจะเพิ่มสองครั้ง


2
@uther นั่นไม่ใช่เรื่องซ้ำซ้อนเนื่องจากคำถามอื่นนั้นมีไว้สำหรับทุบตีในขณะที่คำถามนี้มีไว้สำหรับ zsh ซึ่งมีวิธีของตัวเองในการแก้ไขปัญหานี้
Stéphane Chazelas

คำตอบ:


32

ในzsh $PATHถูกผูก (ดูtypeset -T) กับ$pathอาร์เรย์ คุณสามารถบังคับให้อาร์เรย์นั้นมีค่าที่ไม่ซ้ำกับ:

typeset -U path

จากนั้นเพิ่มเส้นทางด้วย:

path+=(~/foo)

โดยไม่ต้องกังวลหากอยู่ที่นั่นแล้ว

หากต้องการเพิ่มไว้ด้านหน้าทำ:

path=(~/foo "$path[@]")

หรือ:

path[1,0]=~/foo

ถ้า~/fooอยู่ในที่แล้ว$pathจะย้ายไปไว้ด้านหน้า


คุณไม่ได้หมายถึง typeset -Ug pathเหรอ เมื่อฉันใช้typeset -U pathใน~/.zshrcไฟล์ของฉันฉันมักจะได้รับข้อผิดพลาดกลับมาเกี่ยวกับอะไรอยู่ในเส้นทางในขณะที่ zshrc กำลังทำงานอยู่
kalbasit

@eMxyzptlk แปลก -gคือการหลีกเลี่ยงการ จำกัด ขอบเขต แต่ใน~/.zshrcขอบเขตนั้นเป็นแบบโกลบอลอยู่แล้ว นอกจากนี้ฉันไม่เคยเห็นzshบ่นเกี่ยวกับที่ว่างเปล่า$PATH(ยกเว้นสำหรับคำสั่งไม่พบข้อผิดพลาดแน่นอน)
Stéphane Chazelas

3

เพิ่มexport -U PATH=~/foo${PATH:+:$PATH}ลงในหนึ่งในไฟล์เริ่มต้นของคุณ การ-Uเก็บรักษาเพียงครั้งแรกที่เกิดขึ้นของค่าในอาร์เรย์หรือ:ตัวแปรที่คั่นด้วยบางอย่างเช่น PATH


-3

คุณจะต้องทำสิ่งที่ชอบ:

if echo $PATH | grep :newpath: ; then doIfPresent; else doIfMissing; fi

ใช้งานได้เฉพาะในกรณีที่newpathมีการคั่น 'สอง:', ต้องพิจารณากรณีเมื่อมันอยู่ที่จุดเริ่มต้นหรือจุดสิ้นสุดในทำนองเดียวกัน

Urgh


1
คุณสามารถทำสิ่งนั้นภายในเชลล์ได้โดยใช้คุณสมบัติ Bourne / POSIX เท่านั้น วิธีนี้จะช่วยหลีกเลี่ยงการปวดหัว (อย่างน้อยก็ทำให้echo "$PATH": ใส่เครื่องหมายคำพูดคู่ไว้รอบ ๆ การแทนที่ตัวแปรเสมอ) case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac
Gilles 'ดังนั้นหยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.