ไฟล์การตั้งค่าใดที่ควรใช้สำหรับการตั้งค่าตัวแปรสภาพแวดล้อมด้วย bash


9

เมื่อฉันถามและรับคำตอบที่นี่และที่นี่ตัวแปร PATH มีชื่อพา ธ ที่แตกต่างกันขึ้นอยู่กับวิธีการเปิดใช้งานแอป

  • ควรใช้ไฟล์การตั้งค่าใด (.bashrc, .profile, ... ) เพื่อให้มีตัวแปร PATH เดียวกันไม่ว่าฉันจะเริ่มซอฟต์แวร์ด้วย bash อย่างไร

คำตอบ:


15

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

Bash เป็นเปลือกที่รองรับบอร์น เมื่อมันถูกเรียกใช้ในฐานะที่เป็นเปลือกเข้าสู่ระบบอ่าน~/.bash_profileว่าไฟล์นี้มีอยู่และ~/.profileถ้า~/.bash_profileไม่มี

ตามกฎทั่วไปหากคุณพิมพ์รหัสผ่านในโหมดข้อความ (เช่นบนคอนโซลข้อความหรือจากระยะไกลด้วย ssh) เชลล์ที่คุณได้รับคือเชลล์ล็อกอิน

อย่างไรก็ตามหากคุณพิมพ์รหัสผ่านของคุณในโปรแกรมกราฟิกและได้รับการเข้าสู่ระบบในสภาพแวดล้อมแบบกราฟิกนี้จะข้ามเปลือกเข้าสู่ระบบปกติ การ.profileอ่านในกรณีนี้ขึ้นอยู่กับการตั้งค่าเซสชันกราฟิกหรือไม่ เช่นมันแตกต่างกันไประหว่างการแจกแจงลินุกซ์, ระหว่างผู้จัดการการแสดงผลและระหว่างสภาพแวดล้อมเดสก์ทอป บางครั้งหนึ่งในโปรแกรมในกลุ่มอย่างชัดเจนจะเรียกเปลือกเข้าสู่ระบบอย่างชัดเจน บางครั้งหนึ่งในโปรแกรมอ่านอย่างชัดเจน~/.profile; และบางครั้งไม่มีสิ่งนี้เกิดขึ้นและ~/.profileไม่ได้รับการอ่าน

เพื่อให้ตัวอย่างของความแปรปรวนเท่าที่ฉันสามารถบอกได้อย่างรวดเร็วจากสคริปต์ที่เกี่ยวข้องใน Ubuntu 10.04: ถ้าคุณเข้าสู่ระบบด้วย kdm หรือ lxdm ~/.bash_profileจะอ่านถ้ามันมีอยู่และ~/.profileอื่น ๆ ; หากคุณเข้าสู่ระบบด้วย gdm ~/.profileอ่านเท่านั้น; หากคุณเข้าสู่ระบบด้วย xdm ~/.profileจะไม่อ่าน

ระบบทั้งหมดที่ฉันรู้จักให้วิธีการตั้งค่าตัวแปรสภาพแวดล้อมแบบผู้ใช้แต่ละคน น่าเสียดายที่ไม่มีคำตอบทั่วไป

โปรดทราบว่าบางครั้งคุณจะเห็นคำแนะนำในการตั้งค่าตัวแปรสภาพแวดล้อม~/.bashrcหรือเริ่มเชลล์การเข้าสู่ระบบในแต่ละเทอร์มินัลในสภาพแวดล้อม GUI ทั้งคู่เป็นความคิดที่ไม่ดี หนึ่งในเหตุผลคือปัญหาที่คุณประสบนั่นคือตัวแปรสภาพแวดล้อมของคุณมีเฉพาะในโปรแกรมที่เริ่มจากเทอร์มินัลและไม่ใช่ในโปรแกรมที่เริ่มต้นโดยตรงด้วยไอคอนหรือเมนูหรือแป้นพิมพ์ลัด


บางแอปพลิเคชันเรียกใช้เชลล์ที่ไม่ใช่การเข้าสู่ระบบแบบโต้ตอบซึ่งหมายถึงไม่ได้อ่าน. profile และ. bash_profile หากคุณต้องการตั้งค่า env vars สำหรับแอปพลิเคชั่นเหล่านั้นวิธีหนึ่งที่ทำได้คือตั้งค่าไว้ใน. bashrc แม้ว่าจะไม่เหมาะสำหรับมัน ดูgithub.com/mobile-shell/mosh/issues/102#issuecomment-12503646
William

@William .profileจะอ่านเมื่อคุณเข้าสู่ระบบในการวางตัวแปรสภาพแวดล้อมใน. .bashrcไม่ได้ทำงานและสถานการณ์ของคุณแสดงให้เห็นว่า: การประยุกต์ใช้ (สมมุติ GUI) ที่ทำงานเปลือกนี้ควรจะมีตัวแปรสภาพแวดล้อมของคุณ แต่ถ้าคุณกำหนดไว้ใน.bashrcมัน doesn' เสื้อ
Gilles

mosh ไม่ใช่ GUI มันเป็นทางเลือกแทน ssh ฉันไม่ได้ปกป้องพฤติกรรมของมันเพียงแค่พยายามช่วยเหลือผู้อื่นที่ประสบปัญหาเดียวกับที่ฉันและคนอื่นมีตามที่อธิบายไว้ในปัญหา Github ที่ฉันเชื่อมโยง
วิลเลียม

2

คำตอบที่ชัดเจนคือในส่วนทุบตีหน้าคนบนทุบตีไฟล์เริ่มต้น "เมื่อเชลล์เชิงโต้ตอบที่ไม่ใช่เชลล์ล็อกอินเริ่มต้นแล้ว Bash จะอ่านและดำเนินการคำสั่งจาก ~ / .bashrc หากมีไฟล์นั้นอยู่"

ตอบคำถามอื่น ๆ ของคุณชี้ให้เห็นว่า eshell bashไม่ได้ทำงานจริง Emacs ไม่eshell bashสมมติว่าeshellจะโหลด.bashrcเป็นความผิดพลาดเป็นสมมติzshหรือจะโหลดcsh .bashrcมันเป็นเปลือกที่แตกต่างกัน

ฉันเห็นสองตัวเลือก:

  1. สร้างสคริปต์ของคุณเองซึ่งจะนำรายชื่อของไดเรกทอรีและสร้างรหัสทุบตีที่เหมาะสมสำหรับการbashและรหัส Elisp eshellสำหรับ
  2. ตั้งค่าตัวแปรสภาพแวดล้อม ESHELL หรือ SHELL ของคุณเพื่อให้คุณรัน bash ภายใน emacs ได้ นั่นคือสิ่งที่ฉันทำ. Bash ทำงานได้ดีใน emacs

นอกจากนี้คุณยังอาจจะสนใจในการอภิปรายเกี่ยวกับการเพิ่มไดเรกทอรีไปยังเส้นทางโดยไม่ซ้ำกัน


1

การตั้งค่า PATH ใน ~ / .profile ของคุณควรจะใช้งานได้ ไฟล์นั้นจะถูกอ่านเมื่อเข้าสู่ระบบโดยเชลล์ที่เข้ากันได้กับ POSIX หรือเชลล์คล้ายบอร์นที่ฉันรู้จักรวมถึงการทุบตี หากคุณทำการเปลี่ยนแปลงไฟล์คุณจะต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้งเพื่อให้การเปลี่ยนแปลงมีผล เนื่องจาก PATH เป็นส่วนหนึ่งของสภาพแวดล้อมของกระบวนการลงชื่อเข้าใช้ของคุณจึงควรส่งออกไปยังทุกเชลล์ที่คุณเริ่มในภายหลัง

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