กำหนดค่า gnome-terminal เพื่อเริ่มต้นทุบตีเป็นเชลล์ล็อกอินไม่อ่าน. bashrc


24

ฉันพยายามที่จะบูรณาการกับคำพังเพย RVM ขั้ว

ตามค่าเริ่มต้น gnome-terminal ไม่ได้เริ่มต้นทุบตีเป็นเปลือกเข้าสู่ระบบ ฉันเปิดใช้งานrun command as a login shellตามคำแนะนำในคำตอบนี้เกี่ยวกับหัวข้อเดียวกันการตั้งค่า RVM แต่เมื่อฉันทำสิ่งนี้.bashrcไฟล์จะไม่อ่าน

ตัวอย่างเช่นฉันสร้างตัวแปรสภาพแวดล้อม.bashrcจากนั้นเมื่อฉันเริ่ม gnome-terminal ใหม่ฉันไม่สามารถอ่านได้ ฉันต้องเรียกใช้อย่างชัดเจนsource .bashrcเพื่ออ่านไฟล์

นี่เป็นพฤติกรรมที่คาดหวังหรือไม่?

คำตอบ:


38

ใช่นั่นเป็นพฤติกรรมที่คาดหวัง

พฤติกรรมในระยะสั้นมีดังนี้:

  • bash เริ่มต้นเป็นเชลล์ล็อกอินแบบโต้ตอบ: อ่าน ~/.profile
  • bash เริ่มต้นเป็นเชลล์แบบไม่ล็อกอิน: อ่าน ~/.bashrc

อ่านคู่มือทุบตีเกี่ยวกับไฟล์เริ่มต้นสำหรับรายละเอียดเพิ่มเติม

โดยส่วนตัวฉันคิดว่าพฤติกรรมนี้แปลกและฉันยังไม่ได้หาเหตุผลเข้าข้างตนเองสำหรับการตัดสินใจออกแบบนี้


คำอธิบายบางคำศัพท์:

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

เปลือกหอยที่สุดที่คุณเห็นเป็นเปลือกหอยที่ไม่ได้เข้าสู่ระบบแบบโต้ตอบ นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งถ้าคุณใช้สภาพแวดล้อมแบบกราฟิกเช่น gnome เพราะ gnome นั้นคือ "login shell" เซสชั่นทุบตีใด ๆ ที่เริ่มต้นภายใน gnome เป็นเปลือกที่ไม่ได้ลงชื่อเข้าใช้ หากคุณต้องการเห็นเชลล์ล็อกอินแบบโต้ตอบจริงให้ไปที่คอนโซลเสมือน (ใช้Ctrl+Alt+F1) จากนั้นล็อกอินโดยใช้ชื่อผู้ใช้และรหัสผ่านของคุณ นั่นคือเชลล์ bash ล็อกอินแบบโต้ตอบจริง Ctrl+Alt+F7คุณสามารถกลับไปที่เปลือกกราฟิกโดยใช้

มีตัวเลือก--loginที่จะทำให้ทุบตีพฤติกรรมราวกับว่ามันเป็นเปลือกเข้าสู่ระบบแม้ว่าจะเริ่มต้นหลังจากที่คุณเข้าสู่ระบบการกำหนดค่า gnome-terminal เพื่อเริ่มต้นทุบตีเป็นเปลือกเข้าสู่ระบบหมายความว่ามันจะเริ่มทุบตีโดยใช้--loginตัวเลือก


โดยปกติแล้วคุณต้องการให้ bash อ่าน~/.bashrcในเชลล์เชิงโต้ตอบ นี่คือวิธีที่ฉันแนะนำให้ทำ:

สร้าง~/.bash_profileไฟล์ หากทุบตีจะเริ่มต้นเป็นเปลือกเข้าสู่ระบบก่อนจะมองหาก่อนที่จะมองหา~/.bash_profile ~/.profileหากพบว่าทุบตีแล้วมันจะไม่ได้อ่าน~/.bash_profile~/.profile

ใส่บรรทัดต่อไปนี้ใน~/.bash_profile:

[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"

ตอนนี้ถ้า bash เริ่มต้นเป็นเชลล์ล็อกอินแบบโต้ตอบมันจะอ่านไฟล์ต่อไปนี้:

  1. ~/.bash_profile
  2. ~/.profile
  3. ~/.bashrc

และถ้า bash เริ่มต้นเป็นเชลล์แบบไม่ล็อกอิน:

  1. ~/.bashrc

คุณควรใส่สิ่งที่เฉพาะเจาะจงลงไป~/.bashrcและสิ่งที่ไม่เฉพาะเจาะจงลง~/.profileไป ยกตัวอย่างเช่นPATHไปใน~/.profileและไปในการHISTCONTROL~/.bashrc

โปรดทราบว่า~/.profileไม่เฉพาะทุบตี เชลล์ที่อ้างอิงข้อความอื่น ๆ (เช่น sh หรือ ksh) และเชลล์กราฟิก (gnome) ก็อ่าน~/.profileเช่นกัน ~/.profileนั่นคือเหตุผลที่คุณไม่ควรใส่ทุบตีสิ่งที่ระบุใน


1
+1 ขอบคุณนี่ทำให้ฉันติดกำแพง ... :-)
richsage

1
mywiki.wooledge.org/DotFilesอธิบายถึงประวัติของสาเหตุว่าทำไมจึงเป็นเช่นนั้น เหตุผลหลักสำหรับปัญหานี้ด้วย rvm แม้ว่าจะเป็นที่ rvm ใส่รหัสซึ่งมีความหมายว่าจะอยู่~/.bashrcในสถานที่แรกในโปรไฟล์แทน ความผิดปกติเกิดขึ้นใน rvm
geirha

ตาม @geirha พวกเขาควรใช้~/.profile
sanmai

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

11

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

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

  1. ไปแก้ไข -> การตั้งค่าโปรไฟล์

  2. เลือกแท็บชื่อและคำสั่ง

  3. ขอให้สังเกตว่ากล่องกาเครื่องหมายเรียกใช้คำสั่งเรียกใช้เป็นเชลล์ล็อกอินไม่ถูกตรวจสอบ! ตรวจสอบ.

แค่นั้นแหละ. หากคุณทำสิ่งนี้กับDefaultโปรไฟล์หรือโปรไฟล์ใดก็ตามที่กำหนดค่าให้ใช้เมื่อสร้างเทอร์มินัลใหม่คุณจะได้รับล็อกอินเชลล์

ฉันเดาว่าภายใต้ประทุนตัวเลือกนี้อาจทำให้-lตัวเลือกผ่านไปยังเปลือกหอย


0

ฉันมีคำถามเดียวกันและพบวิธีแก้ปัญหา: เพียงใช้ SSH สำหรับเชลล์ล็อกอินจริง!

1. ในฐานะ superuser ให้สร้างผู้ใช้ระบบ rvm เฉพาะสำหรับการแยกอย่างสมบูรณ์และกำหนดรหัสผ่าน:

sudo su

useradd -m rvmuser

passwd rvmuser

2. ติดตั้งการพึ่งพาเพื่อให้ rvm สามารถสร้างทับทิมได้โดยไม่ต้องขอรหัสผ่าน superuser:

apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev

3. SSH เข้าสู่ localhost สำหรับเชลล์การเข้าสู่ระบบจริง (คุณอาจต้องapt-get install ssh)

ssh rvmuser@localhost

4. ติดตั้ง rvm

\curl -sSL https://get.rvm.io | bash -s stable

5. ออกจากระบบและกลับมาใหม่อีกครั้งเพื่อให้ฟังก์ชั่น rvm ทั้งหมดถูกโหลด

exit

ssh rvmuser@localhost

6. ใช้ rvm :)


0

มันเป็นเรื่องธรรมดาที่เมื่อใช้ทุบตีที่จะวางการเริ่มต้นในรายละเอียด.bash_profileซึ่งจะถูกอ่านโดยเฉพาะทุบตีเมื่อเข้าสู่ระบบในขณะที่เปลือกหอยอื่น ๆ .profileได้ร่วมกันในอดีต .bash_profileนี้ช่วยให้คุณวางคำสั่งทุบตีเฉพาะ

การใช้สิ่งต่อไปนี้เป็นสิ่งปกติในการดึงชื่อแทนที่กำหนดไว้ใน.bashrc:

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.