Bash ไม่ได้อ่าน. bashrc นอกจากว่าจะเริ่มด้วยตนเอง


22

bashจะไม่ได้มา.bashrcจากเทอร์มินัลเชิงโต้ตอบเว้นแต่ว่าฉันจะเรียกใช้bashจากเทอร์มินัลด้วยตนเอง:

$ bash

หรือแหล่งที่มาด้วยตนเอง:

$ source ./.bashrc

หรือทำงาน:

$ st -e bash

นี่คือผลลัพธ์ที่มีประโยชน์ฉันหวังว่า:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

ฉัน CRUX ลินุกซ์ 3.0 และฉันจะใช้และdwm stฉันพยายามใช้.bash_profileและ.profileไม่ประสบความสำเร็จ

ความคิดใด ๆ

คำตอบ:


19

ทำไมมันถึงมามัน คุณไม่ได้ทำงานจริงbash:

$ echo $SHELL
/bin/sh

ในระบบที่ทันสมัยที่สุดshคือ symlink ไปยังเชลล์พื้นฐาน ใน Debian ของฉันเช่น:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

ในกรณีของคุณshเป็นลิงก์ไปยังbashแต่ตามที่อธิบายไว้ในman bash:

หาก bash ถูกเรียกใช้ด้วยชื่อ sh มันจะพยายามเลียนแบบพฤติกรรมการเริ่มต้นของ sh เวอร์ชั่นที่ผ่านมามากที่สุดเท่าที่จะทำได้ในขณะที่สอดคล้องกับมาตรฐาน POSIX เช่นกัน [... ] เมื่อเรียกใช้เป็นเชลล์เชิงโต้ตอบที่มีชื่อ sh, bash จะมองหาตัวแปร ENV, ขยายค่าของมันหากมีการกำหนดไว้และใช้ค่าที่ขยายเป็นชื่อของไฟล์ที่จะอ่านและดำเนินการ เนื่องจากเชลล์เรียกใช้โดย sh ไม่ได้พยายามอ่านและเรียกใช้คำสั่งจากไฟล์เริ่มต้นอื่น ๆอ็อพชัน --rcfile จะไม่มีผลใด ๆ

และ

--norc
อย่าอ่านและดำเนินการไฟล์เริ่มต้นระบบ /etc/bash.bashrc และไฟล์เริ่มต้นส่วนบุคคล ~ / .bashrc หากเชลล์เป็นแบบโต้ตอบ ตัวเลือกนี้เปิดใช้งานตามค่าเริ่มต้นหากเชลล์ถูกเรียกใช้เป็น sh

ดังนั้นตั้งแต่เปลือกเริ่มต้นของคุณsh, .bashrcไม่ได้อ่าน chsh -s /bin/bashเพียงแค่ตั้งค่าเริ่มต้นเปลือกของคุณเพื่อทุบตีใช้


ขอขอบคุณ. ผมคิดว่ามันไม่ได้เรื่องตั้งแต่ชี้ไปที่/bin/sh /bin/bashฉันคิดว่าปัญหานี้เกิดจากการไม่ได้กำหนดเชลล์อย่างชัดเจนถึง/bin/bashเมื่อฉันสร้างบัญชีผู้ใช้
รีบ

นอกจากนี้ Debian / Ubuntu เปลี่ยนไปdashสำหรับการ/bin/shเป็นส่วนหนึ่งของความพยายามที่จะลดเวลาในการเริ่มต้น นี่คือเฮฮาเมื่อผู้ใช้ของฉันเริ่มถามว่าทำไมเปลือกของพวกเขาทำหน้าที่แตกต่างกัน
kurtm

18

ใน. bash_profile ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้:

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
  . ~/.profile
fi

# If the shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
    . ~/.bashrc
fi

1
@terdon คำตอบของคุณถูกต้อง bashคำตอบของฉันเท่านั้นที่จะสามารถใช้งานได้ถ้าเขาได้ทำงาน เยี่ยมมากฉันพลาดไป
Jeight

สิ่งนี้อาจทำให้คุณปวดหัวเล็กน้อยถ้าคุณวิ่งbashไปพร้อมกับเชลล์ตัวอื่นเช่นksh93ที่ใช้เป็น.profileค่าเริ่มต้น
Kusalananda

หาก ~ / .bash_profile ไม่มีอยู่คุณสามารถสร้างได้
Pratik Singhal

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