Có một tệp Bash sẽ luôn có nguồn gốc trong chế độ tương tác cho dù đó là đăng nhập hay không đăng nhập?


10

Theo tôi biết, các shell tương tác có thể đăng nhập hoặc không đăng nhập, và các tệp khởi động cho chúng là khác nhau.

  • Nếu tương tác + vỏ đăng nhập → /etc/profilethì có thể đọc được đầu tiên của ~/.bash_profile, ~/.bash_login~/.profile
  • Nếu tương tác + vỏ không đăng nhập → /etc/bash.bashrcthì~/.bashrc

Tôi muốn đặt một số biến mỗi lần tôi sử dụng shell tương tác bất kể đó có phải là shell đăng nhập hay không.



1
@strugee Không, câu hỏi này không phải là về các biến môi trường.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles có, nhưng câu trả lời của bạn cũng áp dụng như nhau.
strugee

1
@strugee Đó là vì tôi đã vượt ra ngoài câu hỏi ngay lập tức và chạm vào một chủ đề ngoại vi. Một đoạn trong một câu trả lời không tạo ra một bản sao. Các câu hỏi chỉ trùng lặp nếu chúng có câu trả lời giống hệt nhau, không phải nếu một câu trả lời xảy ra có đủ tài liệu để trả lời câu hỏi thứ hai.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


10

Không, không có. Vâng, đây là một khiếm khuyết thiết kế.

Sử dụng nội dung sau trong ~/.bash_profile:

if [ -e ~/.profile ]; then . ~/.profile; fi
if [[ -e ~/.bashrc && $- = *i* ]]; then . ~/.bashrc; fi

Xin lưu ý rằng bash có một tiện ích thậm chí kỳ quặc hơn: khi đó là một vỏ đăng nhập không tương tác và quá trình cha là rshdhoặc sshd, các nguồn bash ~/.bashrc(nhưng không ~/.bash_profilehoặc ~/.profile). Vì vậy, bạn có thể muốn đặt điều này lên hàng đầu của bạn .bashrc:

if [[ $- != *i* ]]; then return; fi

Xem thêm Sự khác biệt giữa .bashrc và .bash_profileSự khác biệt giữa Shell đăng nhập và Shell không đăng nhập?


Những quirks đó là vì lý do bảo mật (không tải các tệp không mong muốn khi chạy trong cài đặt nhạy cảm bảo mật).
vonbrand

2
@vonbrand Er, cái gì? Không, những điều kỳ quặc này hoàn toàn không liên quan gì đến bảo mật. Không có tập tin bất ngờ nào của người dùng mà liên quan đến người dùng (ngoại trừ việc tải .bashrctrong cài đặt không tương tác thực sự có thể được tính là bất ngờ), cũng như không có bất kỳ kiểm tra nào về bất kỳ bối cảnh nhạy cảm bảo mật nào.
Gilles 'SO- ngừng trở nên xấu xa'

Đây có phải là một phương pháp để ngăn chặn các vòng lặp?
Braiam

1
@Braiam Vòng lặp gì?
Gilles 'SO- ngừng trở thành ác quỷ'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.