Tại sao nên LAN LAN = C; sudo apt-get Clean, v.v.


16

Tôi đã xem qua trang wiki này: Quy trình khắc phục sự cố quản lý gói .

Trong đó, có các lệnh như:

LANG=C;sudo apt-get clean
LANG=C;sudo apt-get autoclean
LANG=C;sudo apt-get -f install
LANG=C;sudo apt-get --fix-missing install
LANG=C;sudo apt-get --purge autoremove
LANG=C;sudo apt-get --fix-missing update -o APT::Cache-Limit=100000000
LANG=C;sudo apt-get update -o APT::Cache-Limit=100000000 && sudo apt-get dist-upgrade

Vậy mục đích của nó là LANG=C;gì?



8
Xin lưu ý rằng tài liệu đó đang sử dụng lệnh không chính xác - nó nên LANG=C commandvà không LANG=C;command. Dạng thứ nhất buộc giá trị của LANGbiến môi trường trong khoảng thời gian commandtrong khi dạng thứ hai thực sự là hai lệnh trong đó phần thứ nhất chỉ đặt biến cục bộ (không xuất) và phần thứ hai chạy lệnh mà không đặt biến môi trường cần thiết.
Guss

2
@Guss: Thật ra nó cũng hoạt động với dấu chấm phẩy. Tại sao? Vì LANG là biến môi trường hiện có khi bạn mở cửa sổ đầu cuối và nếu bạn thay đổi giá trị của nó dưới dạng một lệnh riêng biệt, giá trị đó sẽ là biến môi trường hiệu quả cho đến khi bạn thay đổi lại hoặc quá trình kết thúc.
Gunnar Hjalmarsson

3
@Gunnar - không chính xác: Có lẽ LANGlà trong môi trường, vì vậy nó có thể hoạt động với dấu chấm phẩy dư thừa; nhưng nó là (1) dư thừa vì không có gì thay đổi LANGgiữa các lệnh. Cũng gợi ý ai đó chạy các lệnh theo cách như vậy là (2) sai vì môi trường thay đổi không cần thiết và không được mời, và (3) điều này cung cấp một mẫu không chính xác cho bất kỳ người dùng không hiểu biết nào sau đó áp dụng lại cách sử dụng - có thể với biến shell không có trong môi trường và do đó thậm chí không có bất kỳ ảnh hưởng nào đến các lệnh chạy yêu cầu nó cho chức năng chính xác, có lẽ là an toàn.
FooF

2
@Braiam Tôi quen với cú pháp, nhưng điều quan trọng cần lưu ý là trừ khi biến được xuất, lệnh sẽ không nhìn thấy nó. LANG là một biến môi trường tiêu chuẩn và do đó được xuất theo mặc định - nhưng các biến khác có thể không và OP nên biết điều đó.
Guss

Câu trả lời:


26

Nếu bạn đang khắc phục sự cố, bạn có thể sẽ đăng kết quả của mình trong một số diễn đàn hoặc tại đây, sớm hay muộn.

Khi điều đó xảy ra, việc người dùng khác hiểu nhật ký và đầu ra của bạn sẽ đơn giản hơn nhiều, nếu chúng không được quốc tế hóa.

Điều đó có nghĩa là, nếu bạn đang sử dụng tiếng Pháp hoặc tiếng Trung Quốc hoặc tiếng Hindi hoặc bất kỳ ngôn ngữ hệ thống nào của bạn, thì đầu ra có thể sẽ sử dụng các thuật ngữ trong ngôn ngữ đó và điều đó khiến cho việc hiểu những gì đang diễn ra càng khó khăn hơn.

Địa phương C buộc đầu ra mặc định (thường là tiếng Anh chỉ ASCII).

Tốt nhất là bắt đầu một phiên xử lý sự cố với:

export LC_ALL=C

Thay vì đặt các biến cục bộ cụ thể hoặc đặt nó chỉ cho một lệnh cụ thể.


10

LANG=Csẽ làm cho đầu ra đầu cuối của bạn quay trở lại miền địa phương mặc định. Vì hướng dẫn này đề nghị bạn gửi đầu ra của mình tới Launchpad để được hỗ trợ, họ sẽ yêu cầu bạn làm điều đó để khi bạn dán nó vào, những người khác sẽ có thể đọc nó bất kể bạn thường sử dụng ngôn ngữ nào.


3

Một bổ sung nhỏ mặc dù có lẽ nó không áp dụng trong trường hợp apt vì tôi coi nó là một phần mềm khá ổn định:

Một số chương trình hoạt động sai đáng chú ý khi sử dụng một cài đặt khác cho LANG (hoặc ít nhất khác với C hoặc en_US).

Unity có (vẫn còn?) Những vấn đề này (và các trò chơi dựa trên Unity), Unreal Engine cũng có một số vấn đề. Ngoài ra, một số tập lệnh xây dựng cho Android chỉ chạy với LANG = C đúng hoặc chỉ được biên dịch với biến môi trường này được đặt theo cách này.

Vì vậy, điều này cũng có thể giúp khắc phục sự cố vì lỗi thậm chí có thể không xảy ra với cài đặt này.

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.