Vâng, đó là hành vi dự kiến.
Tóm lại, hành vi như sau:
- bash bắt đầu như một vỏ đăng nhập tương tác: đọc
~/.profile
- bash bắt đầu như một vỏ không đăng nhập tương tác: đọc
~/.bashrc
Đọc hướng dẫn bash về các tập tin khởi động để biết thêm chi tiết.
Cá nhân, tôi nghĩ rằng hành vi này là lạ và tôi chưa tìm thấy sự hợp lý hóa cho quyết định thiết kế này.
Một số giải thích về thuật ngữ:
- Một shell tương tác là một shell mà bạn có thể tương tác, có nghĩa là bạn có thể gõ các lệnh trong đó. Hầu hết các shell bạn sẽ sử dụng là shell tương tác.
- Một vỏ không tương tác là một vỏ mà bạn không thể tương tác. Shell script chạy bên trong shell không tương tác.
- Một vỏ đăng nhập là vỏ được bắt đầu khi bạn đăng nhập vào hệ thống của bạn.
- Một không đăng nhập vỏ là một cái vỏ mà được bắt đầu sau khi quá trình đăng nhập.
Hầu hết các shell bạn thấy là các shell không đăng nhập tương tác . Điều này đặc biệt đúng nếu bạn đang chạy một môi trường đồ họa như gnome, bởi vì sau đó gnome là "vỏ đăng nhập". Bất kỳ phiên bash nào bắt đầu bên trong gnome đều là shell không đăng nhập. Nếu bạn muốn thấy một vỏ đăng nhập tương tác thực sự, hãy vào một bảng điều khiển ảo (sử dụng Ctrl+Alt+F1
) và sau đó đăng nhập bằng tên người dùng và mật khẩu của bạn. Đó là một vỏ bash đăng nhập tương tác thực sự. Bạn có thể quay lại vỏ đồ họa bằng cách sử dụng Ctrl+Alt+F7
.
Có một tùy chọn --login
sẽ làm cho bash hoạt động như thể nó là một vỏ đăng nhập ngay cả khi đã bắt đầu sau khi bạn đã đăng nhập. Định cấu hình gnome-terminal để bắt đầu bash như một vỏ đăng nhập có nghĩa là nó sẽ bắt đầu bash bằng --login
tùy chọn.
Thông thường bạn muốn bash luôn đọc ~/.bashrc
trong một vỏ tương tác. Đây là cách tôi khuyên bạn nên làm điều đó:
Tạo một ~/.bash_profile
tập tin. Nếu bash được bắt đầu như một vỏ đăng nhập, trước tiên nó sẽ tìm kiếm ~/.bash_profile
trước khi tìm kiếm ~/.profile
. Nếu bash tìm thấy ~/.bash_profile
thì nó sẽ không đọc ~/.profile
.
Đặt các dòng sau vào ~/.bash_profile
:
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
Bây giờ nếu bash được bắt đầu như một vỏ đăng nhập tương tác, nó sẽ đọc các tệp sau:
~/.bash_profile
~/.profile
~/.bashrc
và nếu bash được bắt đầu như một vỏ không đăng nhập tương tác:
~/.bashrc
Bạn nên đặt những thứ cụ thể là bash ~/.bashrc
và những thứ không phải là bash cụ thể ~/.profile
. Ví dụ PATH
đi vào ~/.profile
và HISTCONTROL
đi vào ~/.bashrc
.
Lưu ý rằng ~/.profile
không phải là bash cụ thể. Các shell dựa trên văn bản khác (ví dụ sh hoặc ksh) và shell đồ họa (gnome) cũng đọc ~/.profile
. Đó là lý do tại sao bạn không nên đặt bash cụ thể vào ~/.profile
.