Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Trình tự thực thi cho .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 tệp sau:

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

Trình tự thực thi cho trình bao đăng nhập tương tác

Mã giả sau giải thích trình tự thực thi các tệp 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 trình bao tương tác, sau đây là trình tự thực hiện:

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

Xin lưu ý rằng / etc / bashrc được thực thi bởi ~ / .bashrc như được hiển thị bên dưới:

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

Trình tự thực thi cho trình bao tương tác không đăng nhập

Trong khi khởi chạy trình bao tương tác không đăng nhập, sau đây là trình tự thực thi:

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

Lưu ý: Khi một trình bao không tương tác khởi động, nó sẽ tìm kiếm biến môi trường ENV và thực thi giá trị tên tệp được đề cập trong biến ENV.

Kiểm tra trình tự thực thi

Một trong những 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 tệp này và đăng nhập lại vào trình bao và xem giá trị PS1 nào được nhận bởi lời nhắc Linux. Ngoài ra, trước đó chúng ta đã thảo luận về cách sử dụng PS1 để làm cho lời nhắc Linux của bạn cả về chức năng và phong cách.

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 lời nhắc Linux thay đổi giá trị PS1 được đặ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>

Hãy đảm bảo rằng ~ / .bash_profile không có bất kỳ PS1 nào để các phần trên hoạt động bình thườ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 lời nhắc Linux thay đổi giá trị PS1 được đặt bên trong ~ / .bash_profile như được hiển thị bên dưới.

/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 tệp .bash_profile thành một cái gì đó khác. Đăng nhập lại để đảm bảo lời nhắc Linux thay đổi giá trị PS1 được đặt bên trong ~ / .bash_login như hì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 một cái gì đó khác. Đăng nhập lại để đảm bảo lời nhắc Linux thay đổi giá trị PS1 được đặt bên trong ~ / .profile như được hiển thị bên dưới.

~/.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 để kiểm tra trình bao không đăng nhập . Đang thực thi bash ”tại dấu nhắc lệnh sẽ cung cấp một trình bao không đăng nhập khác, sẽ gọi .bashrc như được hiển thị bên dưới.

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


Nếu bạn thích bài viết này, vui lòng đánh dấu trang trên del.icio.us Ngại nó .