Đây là một quyết định ngược dòng đến từ Debian. Lý do cho nó được giải thích trong bài viết wiki rất hay này , trong đó sau đây là một đoạn trích. Tóm tắt điều hành là "để đảm bảo rằng các thông tin đăng nhập GUI và không GUI hoạt động theo cùng một cách":
Hãy lấy xdm làm ví dụ. pierre trở lại sau kỳ nghỉ một ngày và phát hiện ra rằng quản trị viên hệ thống của mình đã cài đặt xdm trên hệ thống Debian. Anh ta đăng nhập tốt, và xdm đọc tệp .xsession của anh ta và chạy fluxbox. Mọi thứ dường như đều ổn cho đến khi anh ta nhận được thông báo lỗi ở địa phương sai! Vì anh ta ghi đè biến LANG trong .bash_profile của mình và vì xdm không bao giờ đọc .bash_profile, nên biến LANG của anh ta được đặt thành en_US thay vì fr_CA.
Bây giờ, giải pháp ngây thơ cho vấn đề này là thay vì khởi chạy "xterm", anh ta có thể định cấu hình trình quản lý cửa sổ của mình để khởi chạy "xterm -ls". Cờ này cho xterm biết rằng thay vì khởi chạy shell thông thường, nó sẽ khởi chạy shell đăng nhập. Theo thiết lập này, xterm sinh ra / bin / bash nhưng nó đặt "- / bin / bash" (hoặc có thể là "-bash") trong vectơ đối số, vì vậy bash hoạt động như một vỏ đăng nhập. Điều này có nghĩa là mỗi khi anh ta mở một xterm mới, nó sẽ đọc / etc / profile và .bash_profile (hành vi bash tích hợp), sau đó .bashrc (vì .bash_profile nói để làm điều đó). Điều này có vẻ hoạt động tốt lúc đầu - các tệp chấm của anh ấy không nặng, vì vậy anh ấy thậm chí không nhận thấy sự chậm trễ - nhưng có một vấn đề tinh tế hơn. Anh ta cũng khởi chạy một trình duyệt web trực tiếp từ menu fluxbox của mình, và trình duyệt web kế thừa biến LANG từ fluxbox, hiện được đặt thành ngôn ngữ sai. Vì vậy, trong khi các xterms của anh ta có thể ổn, và bất cứ điều gì được khởi chạy từ các xterms của anh ta đều ổn, trình duyệt web của anh ta vẫn đưa cho anh ta các trang ở địa phương sai.
Vì vậy, giải pháp tốt nhất cho vấn đề này là gì? Thực sự không phải là một cái phổ quát. Cách tiếp cận tốt hơn là sửa đổi tệp .xsession để trông giống như thế này:
[ -r /etc/profile ] && source /etc/profile
[ -r ~/.bash_profile ] && source ~/.bash_profile
xmodmap -e 'keysym Super_R = Multi_key'
xterm &
exec fluxbox
Điều này khiến trình bao diễn giải tập lệnh .xsession đọc trong / etc / profile và .bash_profile nếu chúng tồn tại và có thể đọc được, trước khi chạy xmodmap hoặc xterm hoặc "thực thi" trình quản lý cửa sổ. Tuy nhiên, có một nhược điểm tiềm năng đối với phương pháp này: dưới xdm, trình bao đọc .xsession chạy mà không có thiết bị đầu cuối kiểm soát. Nếu / etc / profile hoặc .bash_profile sử dụng bất kỳ lệnh nào giả sử sự hiện diện của thiết bị đầu cuối (chẳng hạn như "fortune" hoặc "stty"), các lệnh đó có thể thất bại. Đây là lý do chính tại sao xdm không đọc các tệp đó theo mặc định. Nếu bạn sẽ sử dụng phương pháp này, bạn phải đảm bảo rằng tất cả các lệnh trong "tệp chấm" của bạn đều an toàn để chạy khi không có thiết bị đầu cuối.
-n "$BASH_VERSION"
là sự thật bên ngoài của bash?