สิ่งที่ควร / ไม่ควรเข้าไปใน. zshenv, .zshrc, .zlogin, .zprofile, .zlogout


132

zshฉันกำลังมองหาแนวทางในการสิ่งหนึ่งที่ควรและไม่ควรรวมอยู่ในแฟ้มเริ่มต้นต่างๆสำหรับ

ฉันเข้าใจลำดับของการจัดหาไฟล์เหล่านี้และเงื่อนไขที่พวกเขามีแหล่งที่มา แต่ก็ยังไม่ชัดเจนสำหรับฉันว่าควรจะไปที่ไหนในแต่ละไฟล์


คำตอบ:


156

นี่คือรายการที่ไม่เฉพาะเจาะจงของสิ่งที่แต่ละไฟล์มีแนวโน้มที่จะมี:

  • เนื่องจาก.zshenvมีที่มาเสมอมันมักจะมีตัวแปรส่งออกที่ควรมีให้กับโปรแกรมอื่น ๆ ตัวอย่างเช่น$PATH, $EDITORและมักจะตั้งอยู่ใน$PAGER .zshenvนอกจากนี้คุณยังสามารถตั้งค่า$ZDOTDIRใน.zshenvการระบุตำแหน่งทางเลือกสำหรับส่วนที่เหลือของการกำหนดค่า zsh ของคุณ
  • .zshrcใช้สำหรับการกำหนดค่าเชลล์แบบโต้ตอบ คุณตั้งค่าตัวเลือกสำหรับเชลล์เชิงโต้ตอบที่นั่นด้วยsetoptและunsetoptคำสั่ง นอกจากนี้คุณยังสามารถโหลดโมดูลเชลล์ตั้งค่าตัวเลือกประวัติเปลี่ยนพรอมต์ตั้งค่า zle และเสร็จสมบูรณ์และอื่น ๆ นอกจากนี้คุณยังตั้งค่าตัวแปรใด ๆ ที่ใช้ในเชลล์เชิงโต้ตอบเท่านั้น (เช่น$LS_COLORS)
  • .zloginมีที่มาจากจุดเริ่มต้นของเปลือกเข้าสู่ระบบ startxแฟ้มนี้มักจะถูกใช้ในการเริ่มใช้ X บางระบบเริ่มต้น X เมื่อบู๊ตดังนั้นไฟล์นี้อาจไม่มีประโยชน์เสมอไป
  • .zprofileโดยพื้นฐานแล้วเหมือนกับ.zloginว่ามันมีแหล่งที่มาโดยตรงก่อนที่จะ.zshrcมีแหล่งที่มาแทนที่จะเป็นโดยตรงหลังจากที่มัน ตามเอกสารของ zsh " .zprofileมีความหมายว่าเป็นทางเลือกแทน` .zlogin 'สำหรับแฟน ๆ ksh; ทั้งสองไม่ได้ตั้งใจที่จะใช้ร่วมกันแม้ว่าจะสามารถทำได้ถ้าต้องการแน่นอน "
  • .zlogout บางครั้งใช้เพื่อล้างและรีเซ็ตเครื่อง

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


3
เช่นเดียวกับจุดที่ชัดเจน. zlogin มีแหล่งที่มาหลัง. zshrc (ดูman zshallรายละเอียด)
แอรอน

8
โปรดทราบเมื่อตั้งค่า$PATHใน.zshenvไฟล์อื่น ๆ ทั้งหมดมีที่มาหลังจากที่ไฟล์ที่จะแทนที่ค่านี้ ดูzsh.org/mla/users/2003/msg00600.html
Beau Barker

ที่ไหนควร$LANGและ$LC_ALLไป?
Lenar Hoyt

23
สำหรับบันทึก / การยืนยันของฉันและเพื่อช่วยคนอื่นลำดับสุดท้ายคือ.zshenv→ [ .zprofileถ้าเข้าสู่ระบบ] → [ .zshrcถ้าโต้ตอบ] → [ .zloginถ้าเข้าสู่ระบบ] → [ .zlogoutบางครั้ง]
Gabriel L.

23

นี่คือรายการสิ่งที่แต่ละไฟล์ควร / ไม่ควรมีในความคิดของฉัน:

.zshenv

[อ่านทุกครั้ง]

มันมีที่มาเสมอดังนั้นจึงควรตั้งค่าตัวแปรสภาพแวดล้อมซึ่งจะต้องมีการปรับปรุงบ่อย PATH (หรือเส้นทางที่เกี่ยวข้องกัน) เป็นตัวอย่างที่ดีเพราะคุณอาจไม่ต้องการเริ่มต้นเซสชันใหม่ทั้งหมดเพื่อให้อัปเดต ด้วยการตั้งค่าในไฟล์นั้นการเปิดเทอร์มินัลอีมูเลเตอร์อีกครั้งจะเริ่มต้นอินสแตนซ์ Zsh ใหม่ด้วยค่าPATH ที่อัพเดท

แต่ทราบว่าไฟล์นี้จะอ่านแม้ในขณะที่มีการเปิดตัว zsh เพื่อเรียกใช้คำสั่งเดียว (กับ-cตัวเลือก) makeแม้โดยเครื่องมืออื่นเช่น คุณควรระวังไม่ให้ปรับเปลี่ยนพฤติกรรมเริ่มต้นของคำสั่งมาตรฐานเนื่องจากอาจทำให้เครื่องมือบางอย่างที่ใช้งานไม่ได้ (โดยการตั้งค่านามแฝงเป็นต้น) แน่นอนว่ามันไม่ถูกห้ามเพราะคุณรู้ว่าคุณกำลังทำอะไรอยู่

.zprofile

[อ่านเมื่อเข้าสู่ระบบ]

ฉันถือว่าไฟล์นั้นเป็นส่วนตัว.zshenvแต่สำหรับคำสั่งและตัวแปรที่ควรตั้งค่าหนึ่งครั้งหรือที่ไม่จำเป็นต้องได้รับการปรับปรุงบ่อยครั้ง :

  • ตัวแปรสภาวะแวดล้อมเพื่อกำหนดค่าเครื่องมือ (แฟล็กสำหรับการคอมไพล์ตำแหน่งโฟลเดอร์ข้อมูล ฯลฯ )
  • การกำหนดค่าซึ่งดำเนินการคำสั่ง (เช่นSCONSFLAGS="--jobs=$(( $(nproc) - 1 ))") เนื่องจากอาจใช้เวลาสักครู่ในการดำเนินการ

หากคุณแก้ไขไฟล์นั้นคุณสามารถรับการอัพเดตการกำหนดค่าได้โดยแทนที่เชลล์ปัจจุบันด้วยเชลล์ใหม่เป็นล็อกอินเชลล์:

exec zsh --login

.zshrc

[อ่านเมื่อมีการโต้ตอบ]

ฉันใส่ที่นี่ทุกอย่างที่จำเป็นสำหรับการใช้งานแบบโต้ตอบ :

  • พรอมต์
  • คำสั่งเสร็จสิ้น
  • การแก้ไขคำสั่ง
  • ข้อเสนอแนะคำสั่ง
  • เน้นคำสั่ง
  • เอาท์พุทสี
  • ชื่อแทน
  • การเชื่อมโยงที่สำคัญ
  • การจัดการประวัติคำสั่ง
  • เครื่องมือโต้ตอบอื่น ๆ เบ็ดเตล็ด (auto_cd, manydots-magic) ...

.zlogin

[อ่านเมื่อเข้าสู่ระบบ]

ไฟล์นี้เป็นเหมือนแต่หลังจากอ่าน.zshprofile .zshrcฉันคิดว่าเชลล์จะติดตั้งอย่างสมบูรณ์ในเวลานี้

ดังนั้นฉันใช้มันเพื่อเปิดคำสั่งภายนอกซึ่งไม่ได้ปรับเปลี่ยนพฤติกรรมของเชลล์ (เช่นตัวจัดการการเข้าสู่ระบบ)

.zlogout

[อ่านเมื่อออกจากระบบ] [ภายในเชลล์ล็อกอิน]

ที่นี่คุณสามารถล้างข้อมูลเทอร์มินัลหรือการตั้งค่าทรัพยากรอื่น ๆ เมื่อเข้าสู่ระบบ

ฉันจะเลือกตำแหน่งที่จะตั้งค่าได้ที่ไหน

  • มันต้องการโดยคำสั่งรันแบบไม่โต้ตอบ :.zshenv
  • มันควรได้รับการอัพเดตบนเชลล์ใหม่ :.zshenv
  • มันรันคำสั่งซึ่งอาจใช้เวลาในการทำให้สมบูรณ์ :.zprofile
  • มันเกี่ยวข้องกับการใช้แบบโต้ตอบ :.zshrc
  • มันเป็นคำสั่งที่จะทำงานเมื่อเชลล์ติดตั้งอย่างสมบูรณ์ :.zlogin
  • มันเผยแพร่ทรัพยากรที่ได้มาเมื่อเข้าสู่ระบบ:.zlogout

0

อย่าวางสายในssh-agent .zshenvมันทำให้lessคำสั่งของฉันไม่แสดงไฟล์ข้อความใด ๆ อีกต่อไปอาจเป็นเพราะตัวเลือกของมันได้รับการปรับแต่งโดย Prezto ( export LESS='-F -g -i -M -R -S -w -X -z-4'ใน.zprofile)

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