Mengapa "LANG = C; sudo apt-get clean" dll direkomendasikan?

16

Saya menemukan halaman wiki ini: Prosedur Mengatasi Masalah Package Manager .

Di dalamnya, ada perintah seperti:

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

Jadi apa tujuannya LANG=C;?

DK Bose
sumber
8
Harap dicatat bahwa dokumen itu menggunakan perintah yang salah - seharusnya LANG=C commanddan tidak LANG=C;command. Bentuk pertama memaksa nilai LANGvariabel lingkungan selama durasi commandsedangkan bentuk kedua sebenarnya dua perintah di mana bagian pertama hanya menetapkan variabel lokal (tidak diekspor) dan bagian kedua menjalankan perintah tanpa menetapkan variabel lingkungan yang diperlukan.
Guss
2
@ Guss: Sebenarnya ini berfungsi juga dengan titik koma. Mengapa? Karena LANG adalah variabel lingkungan yang ada saat Anda membuka jendela terminal, dan jika Anda mengubah nilainya sebagai perintah terpisah, nilai itu akan menjadi variabel lingkungan efektif hingga Anda mengubahnya lagi atau proses berakhir.
Gunnar Hjalmarsson
3
@ Gunnar - tidak benar: Mungkin LANGada di lingkungan, jadi mungkin berfungsi dengan titik koma berlebihan; tetapi (1) berlebihan karena tidak ada yang akan berubah LANGantara perintah. Juga mengisyaratkan seseorang untuk menjalankan perintah dengan cara seperti itu adalah (2) salah karena perubahan lingkungan yang tidak perlu dan tidak diundang, dan (3) ini memberikan pola yang salah untuk setiap pengguna yang tidak informasi yang kemudian menerapkan kembali penggunaan - mungkin dengan variabel shell yang tidak ada dalam lingkungan dan dengan demikian bahkan tidak memiliki efek pada menjalankan perintah yang memerlukannya untuk fungsi yang benar, mungkin aman.
FooF
2
@Braiam Saya akrab dengan sintaks, tetapi penting untuk dicatat bahwa kecuali variabel diekspor, perintah tidak akan melihatnya. LANG adalah variabel lingkungan standar dan diekspor secara default - tetapi variabel lain mungkin tidak dan OP harus menyadarinya.
Guss

Jawaban:

26

Jika Anda memecahkan masalah, kemungkinan Anda akan memposting hasil Anda di beberapa forum, atau di sini, cepat atau lambat.

Ketika itu terjadi, akan jauh lebih mudah bagi pengguna lain untuk memahami log dan output Anda, jika mereka tidak diinternasionalisasi.

Artinya, jika Anda menggunakan bahasa Prancis atau Cina atau Hindi atau apa pun sebagai bahasa sistem Anda, hasilnya cenderung menggunakan istilah dalam bahasa itu, dan itu membuat semakin sulit untuk memahami apa yang terjadi.

Lokal C memaksa output default (yang biasanya hanya ASCII bahasa Inggris).

Yang terbaik untuk memulai sesi pemecahan masalah dengan:

export LC_ALL=C

Alih-alih mengatur variabel lokal tertentu, atau mengaturnya hanya untuk perintah tertentu.

muru
sumber
10

LANG=Cakan membuat output terminal Anda kembali ke lokasi default. Karena panduan ini menyarankan Anda mengirimkan output Anda ke Launchpad untuk mendapatkan dukungan, mereka meminta Anda melakukan ini sehingga, ketika Anda menempelkannya, orang lain akan dapat membacanya tidak peduli bahasa apa yang biasanya Anda gunakan.


sumber
3

Tambahan kecil meskipun mungkin tidak berlaku dalam kasus apt karena saya menganggapnya sebagai perangkat lunak yang cukup stabil:

Beberapa program memiliki perilaku buruk ketika menggunakan pengaturan yang berbeda untuk LANG (atau setidaknya berbeda dari C atau en_US).

Unity memiliki (masih memiliki?) Masalah ini (dan game berbasis Unity), Unreal Engine juga memiliki beberapa masalah. Juga beberapa skrip build untuk Android hanya berjalan dengan LANG = C dengan benar atau dikompilasi hanya dengan variabel lingkungan ini dengan cara ini.

Jadi ini juga bisa membantu pemecahan masalah karena bug bahkan mungkin tidak terjadi dengan pengaturan ini.

Larkey
sumber