Những gì bạn mô tả là hành vi bình thường. Bắt đầu bash với -c
tùy chọn sẽ khởi chạy một vỏ không tương tác, không đăng nhập . Điều này có nghĩa là bash sẽ không lấy bất kỳ tệp cấu hình cổ điển nào mà $BASH_ENV
thay vào đó là biến . Như đã giải thích trong trang bash man:
vỏ không tương tác, không đăng nhập:
Ví dụ, khi bash được khởi động không tương tác, để chạy tập lệnh shell, nó tìm biến BASH_ENV trong môi trường, mở rộng giá trị của nó nếu nó xuất hiện ở đó và sử dụng giá trị mở rộng làm tên của tệp để đọc và thực thi . Bash hành xử như thể lệnh sau được thực thi:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
tương tác, vỏ đăng nhập:
Khi bash được gọi dưới dạng shell đăng nhập tương tác hoặc dưới dạng shell không tương tác với tùy chọn --login, đầu tiên nó sẽ đọc và thực thi các lệnh từ tệp / etc / profile , nếu tệp đó tồn tại. Sau khi đọc tệp đó, nó sẽ tìm ~ / .bash_profile , ~ / .bash_login và ~ / .profile , theo thứ tự đó, đọc và thực thi các lệnh từ lệnh đầu tiên tồn tại và có thể đọc được.
vỏ tương tác, không đăng nhập
Khi một vỏ tương tác không phải là vỏ đăng nhập được khởi động, bash sẽ đọc và thực thi các lệnh từ
/etc/bash.bashrc và ~ / .bashrc , nếu các tệp này tồn tại. Điều này có thể bị ức chế bằng cách sử dụng tùy chọn --norc. Tùy chọn tệp --rcfile sẽ buộc bash đọc và thực thi các lệnh từ tệp thay vì /etc/bash.bashrc và ~ / .bashrc.
Vì vậy, nếu bạn muốn shell không tương tác, không đăng nhập của mình thành nguồn ~/.bahsrc
, bạn sẽ cần đặt giá trị BASH_ENV
thành ~/.bashrc
. Thêm dòng này vào ~/.bashrc
hoặc ~/.profile
tập tin của bạn :
export BASH_ENV=~/.bashrc
-c
, trong Linux GNU bash,-c
là lệnh bạn muốn chạy.