Tôi có một biến môi trường cho LANG được đặt trong ~ / .profile nhưng nó không được đặt


8

Tôi muốn đặt miền địa phương.

Tôi có cái này trong ~ / .profile của tôi

#language
export LANG=en_GB.utf8
export TESTING123=en_GB.utf8

Nhưng khi tôi gõ:

echo $LANG $TESTING123

Tôi nhận được (LANG chưa được đặt, nhưng TESTING123 được đặt)

en_US.utf8 en_GB.utf8

Nếu tôi làm export LANG=en_GB.utf8trực tiếp trong vỏ thì tất cả đều hoạt động

#export LANG=en_GB.utf8
#echo $LANG
en_GB.utf8
#locale
LANG=en_GB.utf8
LANGUAGE=
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=

hệ thống là Debian 7.2, shell là bash.


Hình như, một người khác đang ghi đè lên biến. Bạn có thể thêm dòng echo $LANG > /tmp/testngay sau lệnh xuất không?
SHW

Câu trả lời:


7

Có nhiều tệp khởi tạo khác trong đó các biến có thể được đặt sau khi áp dụng, .profilechẳng hạn như .bash_profile .bashrc... vv, hoặc đơn giản là một tệp không chuẩn khác được gọi từ .profilechính nó. Tôi đề nghị trước tiên bạn nên tìm kiếm mọi lần xuất hiện của các biến trong thư mục chính của bạn:

grep "LANG=" .* 

4

Trong debian, bạn đặt ngôn ngữ bằng lệnh sau:

# dpkg-reconfigure locales

Nó sẽ tạo /etc/default/localetập tin và chỉ thêm LANGbiến vào đó. Nếu bạn muốn tùy chỉnh tất cả các LC_*biến, bạn cũng có thể thêm chúng vào đó:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=C
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=C
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

2
Debian là một hệ thống nhiều người dùng, phải có một cách để mỗi người dùng có ngôn ngữ riêng.
ctrl-alt-delor

Tôi đang sử dụng openboxvà trong trường hợp của mình, tôi có thể đặt từng biến LC_*LANGbiến ~/.config/openbox/environmentbằng cách sử dụng export. Nếu bạn đang sử dụng gnomemáy tính để bàn, bạn nên kiểm tra tùy chọn của nó, tôi nhớ rằng có điều gì đó về việc đặt ngôn ngữ ở đâu đó trong bảng điều khiển.
Mikhail Morfikov

3

Đã đi qua và tìm ra điều này cuối cùng bởi vì nó khiến tôi không thể làm điều đó bằng tay, có vẻ không đúng. Trên debian điều này có thể được thực hiện với các update-localetiện ích. Lệnh

update-locale --reset

sẽ làm cho /etc/default/localetập tin bị bỏ qua (nó chỉ đơn giản là nhận xét LANGbiến); dẫn đến một locale:

LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

Lệnh

update-locale LANG=en_US.UTF-8

sẽ đặt thành LANG... bạn đoán nó en_US.UTF-8dẫn đến việc localetạo ra:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Và cuối cùng chỉ để trang trải tất cả các căn cứ của tôi ...

update-locale LANG=C

sẽ thiết lập kết quả của bạn LANGđể xuất ra:Clocale

LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

Debian là một hệ thống nhiều người dùng, phải có một cách để mỗi người dùng có ngôn ngữ riêng.
ctrl-alt-delor

2

Kiểm tra nếu bạn có một ~/.bash_profilehoặc ~/.bash_login; họ sẽ ghi đè lên ~/.profile.

Từ man bash:

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ó tìm kiếm ~/.bash_profile, ~/.bash_login~/.profile, theo thứ tự đó, đọc và thực thi các lệnh từ cái đầu tiên tồn tại và có thể đọc được.

"Là một vỏ đăng nhập tương tác " rất quan trọng, bởi vì các vỏ tương tác thường không phải là các vỏ đăng nhập. Ví dụ, nếu bạn chỉ thay đổi một trong những tệp đó và khởi động thiết bị đầu cuối GUI mới, thì nó sẽ không được áp dụng. Nó chỉ được đọc khi bạn thực sự đăng nhập.


Một khả năng khác là LANG của bạn sau đó được thiết lập lại bởi hệ thống bashrc; kiểm tra xem nếu một trong số ~/.bashrcđó có nguồn gốc , ví dụ,

grep LANG /etc/bashrc

Xin lỗi vì đã không chú ý tốt hơn! Tôi đã thêm một khả năng (cú sút xa) khác ở phía dưới.
goldilocks
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.