Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

ลำดับการดำเนินการสำหรับ .bash_profile, .bashrc, .bash_login, .profile และ .bash_logout

บทความนี้จะอธิบายลำดับการทำงานของไฟล์ต่อไปนี้:

  • /etc/profile
  • ~/.bash_profile
  • ~/.bashrc
  • ~/.bash_login
  • ~/.profile
  • ~/.bash_logout

ลำดับการดำเนินการสำหรับเชลล์การเข้าสู่ระบบแบบโต้ตอบ

โค้ดหลอกต่อไปนี้จะอธิบายลำดับการทำงานของไฟล์เหล่านี้

execute /etc/profile
IF ~/.bash_profile exists THEN
 execute ~/.bash_profile
ELSE
 IF ~/.bash_login exist THEN
 execute ~/.bash_login
 ELSE
 IF ~/.profile exist THEN
 execute ~/.profile
 END IF
 END IF
END IF

เมื่อคุณออกจากระบบเชลล์แบบโต้ตอบ ลำดับของการดำเนินการมีดังนี้:

IF ~/.bash_logout exists THEN
 execute ~/.bash_logout
END IF

โปรดทราบว่า /etc/bashrc ดำเนินการโดย ~/.bashrc ดังที่แสดงด้านล่าง:

# cat ~/.bashrc
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

ลำดับการดำเนินการสำหรับเชลล์ที่ไม่ใช่การเข้าสู่ระบบแบบโต้ตอบ

ขณะเปิดเชลล์แบบโต้ตอบที่ไม่ใช่การเข้าสู่ระบบ ลำดับของการดำเนินการมีดังนี้:

IF ~/.bashrc exists THEN
 execute ~/.bashrc
END IF

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

ทดสอบลำดับการดำเนินการ

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

1. /etc/profile ถูกเรียกใช้งาน เพิ่มบรรทัด PS1 ต่อไปนี้ใน /etc/profile และเข้าสู่ระบบอีกครั้งเพื่อให้แน่ใจว่าพรอมต์ของ Linux จะเปลี่ยนเป็นค่า PS1 ที่ตั้งไว้ใน /etc/profile

# grep PS1 /etc/profile
PS1="/etc/profile> "

[Note: re-login to see the prompt change as shown below]
Last login: Sat Sep 27 16:43:57 2008 from 192.168.1.2
/etc/profile>

โปรดตรวจสอบให้แน่ใจว่า ~/.bash_profile ไม่มี PS1 เพื่อให้ทำงานได้อย่างถูกต้อง

2. ~/.bash_profile ถูกดำเนินการ: เพิ่ม PS1 ต่อไปนี้ใน ~/.bash_profile, ~/.bash_login, ~/.profile และ ~/.bashrc เข้าสู่ระบบอีกครั้งเพื่อให้แน่ใจว่าข้อความแจ้งของ Linux เปลี่ยนเป็นค่า PS1 ที่ตั้งไว้ใน ~/.bash_profile ดังที่แสดงด้านล่าง

/etc/profile> grep PS1 ~/.bash_profile
export PS1="~/.bash_profile> "

/etc/profile> grep PS1 ~/.bash_login
export PS1="~/.bash_login> "

/etc/profile> grep PS1 ~/.profile
export PS1="~/.profile> "

/etc/profile> grep PS1 ~/.bashrc
export PS1="~/.bashrc> "

[Note: Upon re-login, it executed /etc/profile first and ~/.bash_profile next.
So, it took the PS1 from ~/.bash_profile as shown below.
It also did not execute ~/.bash_login, as ~/.bash_profile exists]
Last login: Sat Sep 27 16:48:11 2008 from 192.168.1.2
~/.bash_profile>

3. ~/.bash_login ถูกดำเนินการ เปลี่ยนชื่อ .bash_profile เป็นอย่างอื่น เข้าสู่ระบบอีกครั้งเพื่อให้แน่ใจว่าข้อความแจ้งของ Linux เปลี่ยนเป็นค่า PS1 ที่ตั้งไว้ใน ~/.bash_login ดังที่แสดงด้านล่าง

~/.bash_profile> mv .bash_profile bash_profile_not_used

[Note: Upon re-login, it executed /etc/profile first.
Since it cannot find ~/.bash_profile, it executed ~/.bash_login]
Last login: Sat Sep 27 16:50:55 2008 from 192.168.1.2
~/bash_login>

4. ~/.profile ถูกดำเนินการ เปลี่ยนชื่อ .bash_login เป็นอย่างอื่น เข้าสู่ระบบอีกครั้งเพื่อให้แน่ใจว่าข้อความแจ้งของ Linux เปลี่ยนเป็นค่า PS1 ที่ตั้งไว้ใน ~/.profile ดังที่แสดงด้านล่าง

~/.bash_login> mv .bash_login bash_login_not_used

[Note: Upon re-login, it executed /etc/profile first.
Since it cannot find ~/.bash_profile and ~/.bash_login, it executed ~/.profile]
Last login: Sat Sep 27 16:56:36 2008 from 192.168.1.2
~/.profile>

5. ~/.bashrc ถูกดำเนินการสำหรับการทดสอบเชลล์ที่ไม่ใช่การเข้าสู่ระบบ . กำลังดำเนินการ bash” ที่พรอมต์คำสั่งจะให้เชลล์อื่นที่ไม่ใช่ล็อกอิน ซึ่งจะเรียกใช้ .bashrc ดังที่แสดงด้านล่าง

~/.profile> bash

[Note: This displays PS1 from .bashrc as shown below.]
~/.bashrc> exit
exit

[Note: After exiting from non-login shell, we are back to login shell]
~/.profile>


หากคุณชอบบทความนี้ โปรดบุ๊กมาร์กไว้ที่ del.icio.us และ สะดุดมัน .