"लैंग = सी; सुडो एप्ट-गेट क्लीन" आदि की सिफारिश क्यों की जाती है?


16

मैं इस विकी पृष्ठ पर आया: पैकेज प्रबंधक समस्या निवारण प्रक्रिया

इसमें, इस तरह के आदेश थे:

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

तो इसका उद्देश्य क्या है LANG=C;?



8
कृपया ध्यान दें कि वह दस्तावेज़ गलत तरीके से कमांड का उपयोग कर रहा है - यह होना चाहिए LANG=C commandऔर नहीं LANG=C;command। पहला रूप LANGपर्यावरण चर के मान को बाध्य करता है, commandजबकि दूसरा रूप वास्तव में दो कमांड हैं जहां पहला भाग केवल एक स्थानीय (निर्यात नहीं किया गया) चर सेट करता है और दूसरा भाग आवश्यक पर्यावरण चर को सेट किए बिना कमांड चलाता है।
गस

2
@ गुस: वास्तव में यह अर्धविराम के साथ भी काम करता है। क्यों? क्योंकि टर्मिनल विंडो खोलने पर LANG एक मौजूदा पर्यावरण चर है, और यदि आप एक अलग कमांड के रूप में इसके मान को बदलते हैं, तो यह मान तब तक प्रभावी पर्यावरण चर होगा जब तक कि आप इसे फिर से नहीं बदलते या प्रक्रिया समाप्त नहीं हो जाती।
गुन्नार हेजलारसन २

3
@ गुन्नार - यह गलत है: संभवतः LANGपर्यावरण में है, इसलिए यह शायद निरर्थक अर्धविराम के साथ काम करता है; लेकिन यह (1) निरर्थक है क्योंकि LANGआज्ञाओं के बीच कुछ भी बदलने वाला नहीं है । इसके अलावा किसी को इस तरह से कमांड चलाने के लिए इशारा करना (2) गलत तरीके से और बिन बुलाए बदलते परिवेश के कारण गलत है, और (3) यह किसी भी अनजाने उपयोगकर्ता के लिए एक गलत पैटर्न प्रदान करता है जो बाद में उपयोग को फिर से लागू करता है - संभवतः एक शेल चर के साथ नहीं है जो में नहीं है वातावरण और इस प्रकार कमांड पर कोई प्रभाव नहीं पड़ता है जो इसे सही, शायद सुरक्षित, फ़ंक्शन के लिए आवश्यक है।
FooF

2
@Braiam मैं वाक्य रचना से परिचित हूं, लेकिन यह ध्यान रखना महत्वपूर्ण है कि जब तक चर निर्यात नहीं किया जाता है, कमांड इसे नहीं देखेगा। लैंग एक मानक पर्यावरण चर है और इसलिए डिफ़ॉल्ट रूप से निर्यात किया जाता है - लेकिन अन्य चर नहीं हो सकते हैं और ओपी को इसके बारे में पता होना चाहिए।
गस

जवाबों:


26

यदि आप समस्या निवारण कर रहे हैं, तो आप जल्द ही या बाद में, किसी न किसी फोरम में अपने परिणाम पोस्ट करेंगे।

जब ऐसा होता है, तो यह आपके लॉग और आउटपुट को समझने के लिए अन्य उपयोगकर्ताओं के लिए बहुत अधिक सरल होता है, अगर वे अंतर्राष्ट्रीयकृत नहीं हैं।

यह कहना है, यदि आप फ्रेंच या चीनी या हिंदी या जो कुछ भी आपके सिस्टम की भाषा के रूप में उपयोग कर रहे हैं, आउटपुट का उस भाषा में शब्दों का उपयोग करने की संभावना है, और यह समझने के लिए यह सब कठिन बना देता है कि क्या हो रहा है।

C लोकेल डिफ़ॉल्ट आउटपुट (जो आमतौर पर ASCII- केवल अंग्रेज़ी है) को बाध्य करता है।

इसके साथ समस्या निवारण सत्र शुरू करना सबसे अच्छा है:

export LC_ALL=C

विशिष्ट स्थानीय चर सेट करने के बजाय, या इसे केवल एक विशिष्ट कमांड के लिए सेट करें।


10

LANG=Cडिफ़ॉल्ट टर्मिनल पर आपके टर्मिनल आउटपुट को वापस कर देगा। जैसा कि यह मार्गदर्शिका आपको अपना आउटपुट लॉन्चपैड को समर्थन के लिए भेजने का सुझाव देती है, वे आपको ऐसा करने में मदद कर रहे हैं, ताकि जब आप इसे पेस्ट करें, तो अन्य इसे पढ़ सकें, चाहे आप किसी भी भाषा का उपयोग करें।


3

एक छोटा सा जोड़ हालांकि यह शायद उपयुक्त के मामले में लागू नहीं होता है क्योंकि मैं इसे सॉफ्टवेयर के एक स्थिर टुकड़े के रूप में मानता हूं:

LANG के लिए एक अलग सेटिंग (या C या en_US से अलग से कम से कम) का उपयोग करते समय कुछ प्रोग्राम गलत तरीके से दुर्व्यवहार करते हैं।

यूनिटी के पास (अभी भी है?) इन मुद्दों (और यूनिटी-आधारित गेम), अवास्तविक इंजन में कुछ समस्याएं भी थीं। साथ ही Android के लिए कुछ बिल्ड-स्क्रिप्ट्स केवल LANG = C के साथ ठीक से चलती हैं या केवल इस तरह से पर्यावरण चर सेट के साथ संकलित की जाती हैं।

तो यह समस्या निवारण में भी मदद कर सकता है क्योंकि बग इस सेटिंग के साथ भी नहीं हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.