Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Cách Bash Tải .bash_profile, .bashrc, .bash_login, .profile và .bash_logout

Bài viết này sẽ giải thích trình tự thực thi các file sau:

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

Trình Tự Thực Thi Cho Shell Đăng Nhập Tương Tác

Đoạn mã giả sau giải thích trình tự thực thi các file này.

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

Khi bạn đăng xuất khỏi shell tương tác, trình tự thực thi sau đây:

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

Lưu ý rằng /etc/bashrc được thực thi bởi ~/.bashrc như dưới đây:

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

Trình Tự Thực Thi Cho Shell Không Đăng Nhập Tương Tác

Khi khởi chạy một shell tương tác không đăng nhập, trình tự thực thi sau:

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

Lưu ý: Khi một shell không tương tác khởi động, nó tìm biến môi trường ENV và thực thi file có tên được đề cập trong biến ENV.

Kiểm Tra Trình Tự Thực Thi

Một cách để kiểm tra trình tự thực thi là thêm các giá trị PS1 khác nhau vào các file này và đăng nhập lại vào shell để xem giá trị PS1 nào được nhặt bởi dấu nhắc Linux. Chúng ta cũng đã thảo luận về cách dùng PS1 để làm dấu nhắc Linux vừa chức năng vừa đẹp.

1. /etc/profile được thực thi. Thêm dòng PS1 sau vào /etc/profile và đăng nhập lại để đảm bảo dấu nhắc Linux thay đổi thành giá trị PS1 đặt bên trong /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>

Đảm bảo ~/.bash_profile không có PS1 nào để việc trên hoạt động đúng.

2. ~/.bash_profile được thực thi: Thêm PS1 sau vào ~/.bash_profile, ~/.bash_login, ~/.profile và ~/.bashrc. Đăng nhập lại để đảm bảo dấu nhắc Linux thay đổi thành giá trị PS1 đặt bên trong ~/.bash_profile như dưới đây.

/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 được thực thi. Đổi tên .bash_profile thành tên khác. Đăng nhập lại để đảm bảo dấu nhắc Linux thay đổi thành giá trị PS1 đặt bên trong ~/.bash_login như dưới đây.

~/.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 được thực thi. Đổi tên .bash_login thành tên khác. Đăng nhập lại để đảm bảo dấu nhắc Linux thay đổi thành giá trị PS1 đặt bên trong ~/.profile như dưới đây.

~/.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 được thực thi cho kiểm tra shell không đăng nhập. Thực thi bash tại dấu nhắc lệnh sẽ cho một shell không đăng nhập khác, sẽ gọi .bashrc như dưới đây.

~/.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>