/ etc / profile ไม่ได้มีที่มา


45

สำหรับ 11.04 ฉันได้ติดตั้งระบบใหม่ ส่วนหนึ่งของที่ติดตั้งคือการติดตั้งRVMซึ่งแท่งในrvm.sh /etc/profile.d/สิ่งนี้ใช้ไม่ได้/etc/profile(ซึ่งโหลดแต่ละ + r ใน/etc/profile.d/*.sh) จะไม่ถูกโหลด ตามเอกสารประกอบโปรไฟล์จะมีที่มาเฉพาะถ้ามีการใช้ bash ในการเข้าสู่ระบบเท่านั้น ในการตรวจสอบสิ่งนี้ฉันเรียกใช้bash --loginหลังจากrvmนั้น

สิ่งนี้ใช้ได้กับฉันใน Ubuntu รุ่นก่อนหน้าโดยไม่มีการกำหนดค่าใด ๆ นั่นคือการติดตั้งใหม่ของ 10.10 จะถูกต้องโปรไฟล์แหล่งที่มา / .d

คำถามของฉันคือ: มีอะไรที่ฉันทำผิดหรือมีข้อสันนิษฐานใหม่ ๆ เกิดขึ้นใน Natty หรือเปล่า วิธีแก้ปัญหาปัจจุบันของฉันคือการsource /etc/profileใน~/.bashrc(ซึ่งเป็นที่น่ากลัวเป็นรายละเอียดจะหมายถึงการโหลดก่อน bashrc แต่ไม่หลอกลวง)

คำตอบ:


52

ตามค่าเริ่มต้น gnome-terminal จะไม่เริ่ม bash เป็นเชลล์การเข้าสู่ระบบ (ฉันถือว่าคุณหมายถึง bash ที่เริ่มต้นภายใน gnome-terminal) นั่นหมายความว่าทุบตีจะไม่อ่านหรือ/etc/profile ~/.profileเมื่อคุณสังเกตอย่างถูกต้องแล้วทุบตีจะอ่านไฟล์เหล่านั้นถ้าเริ่มเป็นเปลือกเข้าสู่ระบบ

การแก้ไขอย่างรวดเร็วในการแก้ไขปัญหาของคุณคือการกำหนดค่า gnome-terminal /etc/profileเพื่อเริ่มทุบตีเป็นเปลือกเข้าสู่ระบบจึงจะอ่าน ในการทำเช่นนั้นคุณจะต้องเปิดใช้งาน "เรียกใช้คำสั่งเป็นเปลือกเข้าสู่ระบบ" ใน "การตั้งค่าโปรไฟล์" gnome-terminal ที่สามารถเข้าถึงได้จากเมนูแก้ไข

ผมไม่แนะนำให้ทำเช่นนี้เพราะมัน messes up ความแตกต่างระหว่างและ~/.profile ~/.bashrcอุดมคติ~/.profileควรทำสิ่งที่จำเป็นเพียงครั้งเดียวในระหว่างการเข้าสู่ระบบในขณะที่~/.bashrcควรทำสิ่งที่จำเป็นต้องใช้ทุกครั้งที่เริ่มทุบตี

มีเป็นคำถามและคำตอบที่ superuser พูดคุยเกี่ยวกับความแตกต่างระหว่าง bashrc และรายละเอียด อ่านข้อมูลเพิ่มเติมได้ที่นี่

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


การตั้งค่า 'รันคำสั่งเป็นล็อกอินเชลล์' โหลดได้อย่างแน่นอน/etc/profile(และทำให้. d's) ขอบคุณสำหรับคำอธิบาย - ดูเหมือนว่าสิ่งนี้ต้องมีการติดตามด้วย rvm folk
Marc

7
ดูเหมือนว่า Ubuntu 11.04 จะไม่อ่าน/etc/profileและ~/.profileระหว่างการเข้าสู่ระบบ มันแปลกเพราะมันใช้งานได้กับเวอร์ชั่นเก่าเสมอ ฉันคิดว่านี่ไม่ใช่วิธีแก้ปัญหา แต่เป็นวิธีแก้ปัญหา
Luca

2
@lesmana มีวิธีที่ฉันสามารถเปิดใช้งาน "Run Command เป็น shell login" จาก CLI แทนที่จะเป็น GUI หรือไม่ ฉัน sshed เป็นเซิร์ฟเวอร์ระยะไกลและลาดเทไปข้างหน้า X ในเครื่อง
Waseem

5

อย่างไรก็ตามมีไฟล์/etc/bash.bashrc ที่อ่านโดย gnome-terminal และเป็น "ไฟล์. bashrc ทั่วทั้งระบบสำหรับเปลือก bash แบบโต้ตอบ (1)"

การเรียกไปยังฟังก์ชัน rvm ของฉัน[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"ไปที่นั่นและใช้งานได้ดีสำหรับผู้ใช้สองคนในระบบนั้น


gnome-terminal ไม่ทำอะไรเลย คำพังเพยขั้ววิ่งทุบตี (หรือสิ่งที่เปลือกเข้าสู่ระบบของคุณตั้งค่าในฐานข้อมูล passwd) /etc/bash.bashrcในโหมดโต้ตอบและทุบตีเริ่มโต้ตอบอ่าน อย่างน้อยใน Debian / Ubuntu โดยปกติแล้ว Bash จะไม่อ่าน bashrc ทั้งระบบ เดเบียนได้ติดตั้งให้ทำเช่นนั้น
geirha

@geirha: dmitri @ Eos: ~ $ uname -a Linux Eos 3.0.0-16- ทั่วไป # 29-Ubuntu SMP อังคาร 14 ก.พ. , 48:51 UTC UTC x86_64 x86_64 x86_64 GNU / Linux dmitri @ Eos: ~ $ cat / etc / bash.bashrc # ไฟล์. bashrc ทั่วทั้งระบบสำหรับเชลล์ bash (1) แบบโต้ตอบ # ในการเปิดใช้งานการตั้งค่า / คำสั่งในไฟล์นี้สำหรับเชลล์ล็อกอินเช่นกัน # ไฟล์นี้จะต้องมีแหล่งที่มาใน / etc / profile # ถ้าไม่ทำงานแบบโต้ตอบอย่าทำอะไร [-z "$ PS1"] && กลับ .....
Dmitri

2
ใช่แน่นอน gnome-terminal ขอให้ bash อ่านไฟล์นั้น: ถ้าเชลล์ของคุณคือ ksh แล้ว gnome-terminal จะไม่อ่านไฟล์นั้นหรือไม่ ฉันขอแนะนำให้ค้นหาคำว่า "คนอวดรู้" ในพจนานุกรมก่อนที่คุณจะใช้วลีกวน ๆ เช่น "ไม่ทำอะไรเลย"
Dmitri

4

การติดตั้ง RVM ในฐานะผู้ใช้หลายคนต้องการให้ผู้ใช้รันคำสั่งนี้:

(เพราะ Ubuntu ไม่ได้มา /etc/profile.d ที่ล็อกอิน)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc

3
อูบุนตูทำแหล่งไฟล์ใน/etc/profile.d/ระหว่างการเข้าสู่ระบบเนื่องจากค่าเริ่มต้น/etc/profileวน/etc/profile.d/ซ้ำและแหล่งที่มาของไฟล์ อย่างไรก็ตามหากสิ่งนี้rvm.shมีรหัสสำหรับเชลล์แบบโต้ตอบเช่นฟังก์ชั่นหรือชื่อแทนการที่พวกมันมีแหล่งที่มาโดย/etc/profileไม่มีจุดหมาย .bashrcการตั้งค่าสำหรับการประชุมทุบตีโต้ตอบจะต้องอยู่ใน
geirha


0

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

คุณไม่จำเป็นต้องรีสตาร์ทเครื่องทั้งหมดเพื่อให้การเปลี่ยนแปลง/etc/profileมีผล สิ่งที่คุณต้องมีก็คือให้ XWindows Desktop GUI ของคุณเริ่มต้นใหม่เพื่อให้สามารถอ่านการกำหนดค่าได้อีกครั้ง (ตามที่ต้องการหากเริ่มต้นโดยเป็นส่วนหนึ่งของการรีสตาร์ททั้งระบบ)

สำหรับฉันฉันใช้ xUbuntu ซึ่งใช้ LightDM แต่คุณสามารถย่อยสิ่งที่เรียกได้ว่าปฏิบัติการบนเดสก์ท็อปปัจจุบันของคุณ

ก่อนอื่นคุณไม่สามารถใช้เทอร์มินัลอีมูเลเตอร์จากภายในเดสก์ท็อป GUI เพื่อทำสิ่งนี้ (อย่างน้อยก็ไม่ใช่กับ LightDM) คุณต้องใช้ SSH หรือคอนโซลรอง (ถ้าคุณกด Ctrl + Alt แล้วกดปุ่ม F หรือปุ่มตัวเลข คุณควรถอยห่างจากล็อกอินหรือหน้าจอเดสก์ท็อปกราฟิกของคุณไปที่หน้าต่างเทอร์มินัลธรรมดา) ฉันยังแนะนำให้คุณปิดสิ่งเดสก์ท็อประยะไกลเช่น VNC ถ้าคุณใช้ SSH (เห็นได้ชัดว่า SSH สามารถเชื่อมต่อคุณได้เพียงแค่ไม่ต้องการให้หน้าต่าง VNC เปิดทำการสำรวจความคิดเห็นที่ 0 ในขณะที่พยายามรีสตาร์ท มันจะรอให้คุณยกเลิกเซสชัน VNC)

ฉันทำสิ่งนี้ตลอดเวลากับ SSH และมันเป็นเครื่องช่วยชีวิตที่ยิ่งใหญ่โดยเฉพาะอย่างยิ่งเมื่อคุณไม่ได้ใช้เครื่องของคุณและไม่รู้สึกอยากรอการรีสตาร์ทเต็มรูปแบบและเชื่อมต่อใหม่ :-D

ตอนนี้ส่วนที่ง่ายครั้งเดียวในเทอร์มินัล "รอง" หรือปัญหา SSH: (ใช่สิ่งนี้จะฆ่าเซสชันปัจจุบันของคุณให้แน่ใจว่าคุณไม่รังเกียจบันทึกเอกสารหรืองานที่เปิดอยู่)

sudo service lightdm restart

รอสักครู่ขณะที่มันฆ่าเดสก์ท็อปแล้วเริ่มต้นอีกครั้ง (อาจใช้เวลาสักครู่ในขณะที่สิ่งต่าง ๆ หยุดทำงานและดำเนินการอีกครั้งเมื่อเริ่มต้น)

นั่นคือตอนนี้เมื่อคุณกลับไปที่คอนโซล 0 หรือคุณไปใช้ VNC เพื่อเชื่อมต่ออีกครั้งคุณจะได้รับการต้อนรับจากหน้าจอล็อกอินและการเข้าสู่ระบบตามปกติและถ้าคุณเปิดเทอร์มินัลอีมูเลเตอร์และออกคำสั่งของคุณ ไม่มีปัญหาเพราะทุกอย่างถูกจัดเตรียมใหม่เหมือนคุณทำการรีสตาร์ทเครื่องอย่างสมบูรณ์

เพียงจำไว้ว่าถ้าคุณออกsudo service lightdm restart[หรือstop, startสิ่ง] จากภายในสภาพแวดล้อมเดสก์ทอปของตัวเองโดยใช้จำลอง terminal คำสั่งก็จะแขวนมีและไม่มีอะไรจะดูเหมือนจะเกิดขึ้น นี่เป็นเพราะคุณกำลังใช้คอนโซลนั้น (จอแสดงผล aka) 0 ดังนั้นจึงไม่สามารถลงและกลับมาได้อย่างเต็มที่เนื่องจากกำลังรอให้เดสก์ท็อปไม่สามารถใช้งานได้ก่อนที่จะรันคำสั่ง

Last Note: ฉันไม่ได้พยายามที่จะรีสตาร์ตสภาพแวดล้อมจากภายในเดสก์ท็อปในเทอร์มินัลอีมูเลเตอร์แล้วเปลี่ยนไปใช้คอนโซลอื่นที่อาจรีสตาร์ท แต่ถ้าคุณกำลังจะเปลี่ยนคอนโซลอยู่แล้ว จากที่นั่นควรจะเป็นยังไง?


-4

echo ". .profile" >> ~ / .bashrc

จากนั้นเปิดหน้าต่างอื่น ฉันคิดว่านี่เป็นวิธีที่ง่าย


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