เหตุใดการตั้งค่า 'mi' ใน LS_COLORS เอฟเฟกต์ postgresql และ python จึงเสร็จสมบูรณ์

Aug 18 2020

ดังนั้นฉันจึงมีการLS_COLORSตั้งค่าแบบกำหนดเองและในนั้นฉันมีสิ่งต่อไปนี้:

mi=05;01;33:
or=05;01;33:

miมีไว้สำหรับไฟล์ที่หายไปในคอลัมน์ด้านขวาเมื่ออยู่ในมุมมองรายการของ ls และorสำหรับไฟล์ที่หายไปในโหมด ls ปกติหรือทางด้านซ้ายในโหมดรายการ ด้านบนตั้งค่าให้แฟลชทั้งสองเป็นสีเหลืองสว่าง ฉันตั้งค่าแบบนั้นเพราะฉันคิดว่าการมีแฟลชจะเป็นวิธีที่ชัดเจนที่สุดในการแจ้งเตือนตัวเองว่าลิงก์หายไปซึ่งใช้งานได้ดี

แต่ปัญหาคือเมื่อผมทำงานหลามในโหมดโต้ตอบและขอให้เสร็จสิ้นแท็บเช่นนั้นimport re re.[tab key]แทนที่จะได้รับรายการปกติสิ่งที่อยู่miในLS_COLORSจะถูกนำไปใช้กับคำแนะนำ ดังนั้นฉันจึงจบลงด้วยหน้าจอที่เต็มไปด้วยข้อความกะพริบซึ่งทำให้ไม่สามารถอ่านเส้นขอบได้ในอัตราที่สมเหตุสมผล

สิ่งเดียวกันนี้เกิดขึ้นเมื่อฉันใช้การเติมแท็บในคอนโซลโหมดโต้ตอบ postgresql เหมือนกับ python ทุกประการ โปรแกรมอื่น ๆ ส่วนใหญ่หรือที่คล้ายกันนั้นใช้ได้ดีและการทำ bash ก็ใช้ได้

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

คำตอบ

1 Quasímodo Aug 18 2020 at 23:24

กำลังใช้ GNU readlineซึ่งสามารถยืนยันได้โดยการแสดงรายการโมดูลเริ่มต้น :

$ python3
>>> import sys
>>> sys.modules.keys()
dict_keys([...,'readline', 'atexit', 'rlcompleter'])

Readline LS_COLORSโดยการเปิดของการใช้งาน จากman 3 readline,

color-stats (ปิด)
หากตั้งค่าเป็นเปิด readline จะแสดงความสมบูรณ์ที่เป็นไปได้โดยใช้สีที่ต่างกันเพื่อระบุประเภทไฟล์ คำจำกัดความของสีนำมาจากค่าของตัวแปรสภาพแวดล้อม LS_COLORS

หากคุณไม่มั่นใจให้กลับไปที่เซสชัน python แบบโต้ตอบและพิมพ์

>>> a<TAB><TAB>
abs(     all(     and      any(     as       ascii(   assert   async    await
>>> import readline
>>> readline.parse_and_bind("set colored-stats off")
>>> a<TAB><TAB>
abs(     all(     and      any(     as       ascii(   assert   async    await

หลังจากที่ปิดการใช้งานสีสถิติที่สำเร็จปัญหา ( bs(, ll(ฯลฯ ) ควรจะอยู่ในสีปกติของสถานี คำนำหน้าaยังคงสืบทอดสีจากLS_COLORSและคุณสามารถปิดการใช้งานได้ด้วย

readline.parse_and_bind("set colored-completion-prefix off")