zsh config - เพื่อส่งออกหรือไม่ส่งออก?


23

เมื่อตั้งค่าตัวแปรในของ~/.zshrcฉันฉันสามารถใช้export

export PATH=/some/path

หรือไม่

PATH=/some/path

สิ่งเหล่านี้แตกต่างกันอย่างไรและฉันควรใช้อย่างไร


ตัวแปรสภาวะแวดล้อมที่เชลล์ใช้แบบไม่โต้ตอบ (เช่นเชลล์สคริปต์ที่คุณเขียน) ควรใช้.zshenvด้วย
ฟรานซิสโก

มี~/.zshenvแหล่งที่มาจากเปลือกเข้าสู่ระบบเช่นกัน? ควรPATHกำหนดไว้ที่นั่นไหม
jordelver

1
PATHน่าจะเป็นตัวอย่างที่ดีที่สุดของตัวแปรที่ควรกำหนดไว้ภายใน~/.zshenvไฟล์นี้จะได้รับแหล่งที่มาจากเซสชัน zsh ใด ๆ (เว้นแต่คุณจะใช้ตัวเลือกบางอย่างเพื่อปิดการใช้งาน) ดูman zshการตรวจสอบว่าไฟล์ใดได้มาจากแหล่งใดและอยู่ในลำดับใด
ฟรานซิสโก

ตกลงขอบคุณ @ Francisco ฉันจะอ่านหน้าคน
jordelver

คำตอบ:


21

หากคุณต้องการให้โปรแกรมรันจาก zsh เพื่อดู var ให้ส่งออกมัน
สำหรับเส้นทางคุณอาจต้องการส่งออก
แทนที่จะเป็นเช่นนั้นexport PATH=/some/pathคุณอาจต้องการexport PATH="$PATH:/some/path"เว้นแต่คุณตั้งใจจะล้างเส้นทางของระบบที่ตั้งไว้อย่างสมบูรณ์


เยี่ยมมากขอบคุณ ฉันจะใช้การส่งออกเป็นกฎทั่วไปแล้ว
jordelver

21

Demure ตอบคำถามของคุณแล้ว อย่างไรก็ตามเรื่องนี้เป็นคำถามเกี่ยวกับzsh PATHดังนั้นนี่คือจุดอื่น: นอกจากตัวแปรมาตรฐาน$PATHแล้วยังมี$pathซึ่งก็คืออาร์เรย์ ที่นี่คุณเห็นความแตกต่าง (โคลอนหรือไม่ ... ):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

ตัวแปรทั้งสองจะถูกซิงค์โดยอัตโนมัติ ดังนั้นประโยชน์ของการใช้อาร์เรย์คืออะไร?

  • หลังคุณสามารถประกาศผ่านtypeset -U pathเพื่อ "เก็บเฉพาะการเกิดขึ้นครั้งแรกของแต่ละค่าที่ซ้ำกัน" (จากman zshbuiltins) นั่นหมายความว่านี่จะช่วยให้เส้นทางของคุณสะอาดแม้ว่าคุณจะได้แหล่งที่มาอย่างต่อเนื่อง~/.zshrc(เพราะคุณเปลี่ยนแปลงมันหรืออะไรก็ตาม) และอย่าถ่วงมันด้วยค่าเดิมซ้ำแล้วซ้ำอีก
  • คุณสามารถใช้path+=(/new/path)เพื่อเพิ่มไดเรกทอรีใหม่ไปยัง PATH ของคุณ หากต้องการลบองค์ประกอบที่คุณต้องใช้ลูกเล่นให้ดูที่/programming//q/3435355/2037712หรือhttp://www.zsh.org/mla/users//2005/msg01132.html
  • คุณสามารถวนซ้ำองค์ประกอบต่างๆใน PATH ได้อย่างง่ายดาย for i ($path) { print $i # or do something else }

ในที่สุดนี่คือข้อความที่ตัดตอนมาจาก config ของฉัน:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH

ขอบคุณที่จริงแล้วเป็นคำถามติดตาม ผมจะมองไปที่การจัดการเส้นทางของฉันโดยใช้มากกว่าpath PATH
jordelver

1
ดีใจที่ได้ยินเช่นฉันกลัวแล้วว่าฉันเป็น OT Btw ประโยชน์อื่นฉันลืม: for i ($path) { print $i # or do something else }คุณห่วงสามารถได้อย่างง่ายดายผ่านองค์ประกอบด้วย
mpy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.