บทความนี้จะอธิบายลำดับการทำงานของไฟล์ต่อไปนี้:
- /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 และ สะดุดมัน .