เหตุใดจึงแนะนำให้“ LANG = C; sudo apt-get clean” ฯลฯ


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ในขณะที่รูปแบบที่สองเป็นจริงสองคำสั่งที่ส่วนแรกเพิ่งตั้งค่าตัวแปรท้องถิ่น (ไม่ส่งออก) และส่วนที่สองเรียกใช้คำสั่งโดยไม่ต้องตั้งค่าตัวแปรสภาพแวดล้อมที่ต้องการ
Guss

2
@Guss: จริง ๆ แล้วมันใช้ได้กับอัฒภาค ทำไม? เนื่องจาก LANG เป็นตัวแปรสภาพแวดล้อมที่มีอยู่เมื่อคุณเปิดหน้าต่างเทอร์มินัลและถ้าคุณเปลี่ยนค่าเป็นคำสั่งแยกต่างหากค่านั้นจะเป็นตัวแปรสภาพแวดล้อมที่มีประสิทธิภาพจนกว่าคุณจะเปลี่ยนอีกครั้งหรือกระบวนการสิ้นสุดลง
Gunnar Hjalmarsson

3
@Gunnar - มันไม่ถูกต้อง: อาจLANGเป็นไปได้ในสภาพแวดล้อมดังนั้นจึงอาจทำงานได้กับอัฒภาคซ้ำซ้อน; แต่มันเป็น (1) ซ้ำซ้อนเพราะไม่มีอะไรเปลี่ยนแปลงLANGระหว่างคำสั่ง การบอกให้ใครบางคนในการเรียกใช้คำสั่งในลักษณะนี้เป็น (2) ผิดเนื่องจากสภาพแวดล้อมที่เปลี่ยนแปลงโดยไม่จำเป็นและไม่ได้รับเชิญและ (3) สิ่งนี้ให้รูปแบบที่ไม่ถูกต้องสำหรับผู้ใช้ที่ไม่มีข้อมูลใด ๆ สภาพแวดล้อมและไม่มีผลกระทบใด ๆ ต่อคำสั่งที่จำเป็นต้องใช้เพื่อการทำงานที่ถูกต้องบางทีปลอดภัย
FooF

2
@Braiam ฉันคุ้นเคยกับไวยากรณ์ แต่สิ่งสำคัญที่ควรทราบคือหากไม่ได้ส่งออกตัวแปรคำสั่งจะไม่เห็น LANG เป็นตัวแปรสภาพแวดล้อมมาตรฐานและส่งออกโดยค่าเริ่มต้น - ตัวแปรอื่น ๆ อาจไม่เป็นและ OP ควรทราบ
Guss

คำตอบ:


26

หากคุณกำลังแก้ไขปัญหาคุณอาจโพสต์ผลลัพธ์ของคุณในบางฟอรัมหรือที่นี่ไม่ช้าก็เร็ว

เมื่อสิ่งนี้เกิดขึ้นผู้ใช้รายอื่น ๆ จะเข้าใจบันทึกและผลลัพธ์ของคุณได้ง่ายขึ้นหากพวกเขาไม่ได้ทำให้เป็นสากล

กล่าวคือหากคุณใช้ภาษาฝรั่งเศสหรือภาษาจีนหรือภาษาฮินดีหรือภาษาใด ๆ ก็ตามเป็นภาษาระบบของคุณผลลัพธ์อาจมีการใช้คำศัพท์ในภาษานั้นและนั่นทำให้ยากยิ่งที่จะเข้าใจว่าเกิดอะไรขึ้น

โลแคล Cบังคับให้เอาต์พุตดีฟอลต์ (ซึ่งโดยปกติคือ ASCII ภาษาอังกฤษเท่านั้น)

วิธีที่ดีที่สุดคือเริ่มเซสชันการแก้ไขปัญหาด้วย:

export LC_ALL=C

แทนที่จะตั้งค่าตัวแปรภาษาเฉพาะหรือตั้งค่าเฉพาะสำหรับคำสั่งเฉพาะ


10

LANG=Cจะทำให้ผลลัพธ์เทอร์มินัลของคุณถอยกลับไปที่สถานที่เริ่มต้น เนื่องจากคู่มือนี้แนะนำให้คุณส่งเอาต์พุตของคุณไปยัง Launchpad เพื่อรับการสนับสนุนพวกเขากำลังทำเช่นนั้นเมื่อคุณวางลงในไฟล์อื่น ๆ จะสามารถอ่านได้ไม่ว่าคุณจะใช้ภาษาใด


3

การเพิ่มเล็ก ๆ ถึงแม้ว่ามันอาจไม่ได้ใช้ในกรณีของ apt เพราะฉันคิดว่ามันเป็นซอฟต์แวร์ที่ค่อนข้างเสถียร:

บางโปรแกรมใช้การทำงานที่ผิดปกติเมื่อใช้การตั้งค่าที่แตกต่างกันสำหรับ LANG (หรืออย่างน้อยที่สุดแตกต่างจาก C หรือ en_US)

Unity มี (ยังมี?) ปัญหาเหล่านี้ (และเกมที่ใช้ Unity), Unreal Engine ก็มีปัญหาเช่นกัน build-script สำหรับ Android บางตัวเท่านั้นรันด้วย LANG = C อย่างถูกต้องหรือคอมไพล์ด้วยตัวแปรสภาพแวดล้อมนี้เท่านั้น

ดังนั้นสิ่งนี้อาจช่วยแก้ไขปัญหาได้เนื่องจากข้อผิดพลาดอาจไม่เกิดขึ้นกับการตั้งค่านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.