วิธีการแก้ปัญหาและแก้ไขการเติมข้อความอัตโนมัติช้าในทุบตี?


26

หลังจากอัปเดตล่าสุด (Ubuntu 12.04 LTS) TAB เสร็จสมบูรณ์ในบรรทัดคำสั่งช้า หลังจากป้อนคำสั่งบางส่วน (เช่นevi [TAB]) หรือชื่อไฟล์บางส่วน (เช่นevince somedocu[TAB]) เชลล์บางครั้งอาจไม่เสมอไปแขวนเป็นเวลาหลายวินาที

โดยส่วนตัวแล้วฉันต้องการให้การเติมข้อความอัตโนมัติที่มีประสิทธิภาพน้อยลงไปยังเครื่องที่ช้า มีวิธีแก้ไขง่ายๆหรือไม่?

แก้ไข:ข้อมูลเพิ่มเติมที่เกี่ยวข้องกับความคิดเห็น:

  • PATH นั้นค่อนข้างมาตรฐาน ~ / bin มีสคริปต์ทุบตีบางส่วน

    $ echo $PATH
    /home/USERNAME/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
    
  • จำนวนไฟล์ในไดเรกทอรีการทำงานน้อยกว่า 100

  • คุณลักษณะการเติมข้อความอัตโนมัติช้าลงอย่างมากหลังจากการทำงานของดิสก์ผิดปกติ (อัพเกรดระบบ) ดังนั้นจึงเป็นไปได้ว่าการอ่านซ้ำ / usr / bin และไดเรกทอรีอื่น ๆ ทำให้เกิดความล่าช้า

4
ไม่ใช่ว่าคุณเปิดใช้งานการจัดการความเร็วของฮาร์ดไดรฟ์ด้วยการอัปเดตและการเติมข้อความอัตโนมัติรอให้ดิสก์เริ่มทำงานเพื่อให้สามารถคำนวณการเติมข้อความอัตโนมัติได้หรือไม่
Vincent Nivoliers

2
มันขึ้นอยู่กับจำนวนไฟล์ในไดเรกทอรีปัจจุบันของคุณหรือไม่?
terdon

1
# echo $ PATH พูดว่าอะไร? หากคุณมีไฟล์จำนวนมาก (หลายหมื่นหรือมากกว่า) ในไดเรกทอรีในพา ธ ของคุณนั่นอาจเป็นสาเหตุ
เตฟาน

คำตอบ:


28

ฉันไม่รู้เกี่ยวกับการแก้ไข - มีทุกสิ่งที่อาจทำให้เกิดความล่าช้าได้ แต่ฉันสามารถเสนอเคล็ดลับในการตรวจสอบ

เช่นเดียวกับการเดาว่าอาจมีไดเรกทอรีอยู่ในเส้นทางการค้นหา ( $PATHหรือที่ที่ bash ค้นหาข้อมูลที่สมบูรณ์) ซึ่งอยู่ในระบบไฟล์ซึ่งตอบสนองช้า โดยปกติแล้วจะเป็นระบบไฟล์ระยะไกลที่ช้า แต่ก็อาจเป็นฮาร์ดดิสก์ที่ล้มเหลวไดร์เวอร์ FUSE แบบแขวน ฯลฯ

ขั้นตอนแรกในการตรวจสอบคือการเรียกใช้set -xเพื่อติดตามร่องรอยของคำสั่งที่เชลล์ดำเนินการเพื่อสร้างความสมบูรณ์ ดูว่ามันหยุดอยู่ตรงไหน

หากไม่ได้ให้ข้อมูลเพียงพอนำปืนใหญ่ จดบันทึก ID กระบวนการของเชลล์ ( echo $$) ในเทอร์มินัลอื่นให้เรียกใช้strace -f -s9999 -p$$(หรือเทียบเท่าstraceหากใช้กับ unix รสอื่น) Strace แสดงรายการการเรียกระบบที่ดำเนินการโดยกระบวนการ ดูว่ามันดูเหมือนว่ากำลังเข้าถึงไฟล์ที่ไม่ควรหรือถ้าการเข้าถึงไฟล์บางไฟล์ช้า การเพิ่มตัวเลือก-Tในstraceบรรทัดคำสั่งทำให้มันแสดงเวลาที่ใช้ในการเรียกระบบแต่ละครั้ง


1
ระยะเวลาที่ฉันใช้ Unix และไม่ทราบset -xว่าเป็นคำสั่งที่ยอดเยี่ยมอะไร "โหมดแฮ็กเกอร์ทำงานมาก"
Matt Fletcher

6
ปล. ใช้set +xเพื่อกลับสู่โหมด non-debug ปกติ
Matt Fletcher

19

หากกล่อง * nix ของคุณมีการตั้งค่าเป็นไคลเอ็นต์ LDAP คุณอาจมีปัญหานี้แม้กระทั่งเข้าสู่ระบบในฐานะผู้ใช้ท้องถิ่น

ข้อมูลการดีบักที่น่าเบื่อ:การดีบักด้วยset-xฉันพบความสมบูรณ์ที่ค้างอยู่ที่:

> set -x
> ls foo<tab>
...                     <--- lots of output removed
...
+ _quote_readline_by_ref foo quoted
+ '[' -z foo ']'
+ [[ foo == \'* ]]      <--- froze here
+ [[ foo == ~* ]]       <--- actually causing the trouble

ยืนยัน:ฉันยืนยันสิ่งนี้ด้วยls ~*ที่แขวนอยู่ด้วย ปรากฎว่าเซิร์ฟเวอร์ ldap ของฉันค่อนข้างเชื่องช้า แต่สิ่งนี้ไม่ควรส่งผลกระทบต่อสิ่งต่าง ๆ เช่น bash complete และ ls!

วิธีแก้ปัญหา:อ๊ะมีข้อผิดพลาดที่ยื่นต่อ bash-completion + ldap มันจะได้รับการแก้ไขในเวอร์ชั่นที่ใหม่กว่าและแพทช์ง่าย ๆหากคุณไม่ต้องการรอ เสร็จสิ้นแท็บเร็วอีกครั้งไชโย!

นี่คือไฟล์ patchfile ในกรณีที่ลิงก์หายไป เป็นเพียงการหลบหนี ~ บนบรรทัด 545 และ 547:

--- /usr/share/bash-completion/bash_completion.orig 2014-11-06 10:36:14.981888369 +0100
+++ /usr/share/bash-completion/bash_completion  2014-11-06 10:36:25.142070963 +0100
@@ -542,9 +542,9 @@
     elif [[ $1 == \'* ]]; then
         # Leave out first character
         printf -v $2 %s "${1:1}"
-    elif [[ $1 == ~* ]]; then
+    elif [[ $1 == \~* ]]; then
         # avoid escaping first ~
-        printf -v $2 ~%q "${1:1}"
+        printf -v $2 \~%q "${1:1}"
     else
         printf -v $2 %q "$1"
     fi

คุณต้องออกจากเซสชัน ssh ปัจจุบันและลงชื่อเข้าใช้อีกครั้งเพื่อให้โปรแกรมแก้ไขนี้มีผล


1
ผมมีปัญหาตรงนี้และแพทช์เป็นสิ่งที่ดี
Radman

2
ปัญหาเดียวกันที่นี่ (Debian 8.5) 2 1/3 ปีก่อนและวิธีแก้ปัญหาทำงานได้อย่างมีเสน่ห์ Debian 8.6 ไม่มีปัญหา
YoMismo

2
ฉันได้ตั้งสินค้า -xa ล้านครั้งเลยฉันไม่เคยคิดว่ามันจะยังแสดงให้เห็นปัญหาประสิทธิภาพการทำงานเสร็จขอบคุณมาก!
MarcH

มีปัญหากับ debian 9.8!
Philippe Gachoud

0

ลองติดตั้ง bash-completion อีกครั้ง

sudo apt-get install --reinstall bash-completion

สำหรับฉันนี่ได้รับการแก้ไขใน Ubuntu 18.04.3 LTS


0

นอกจากนี้ยังมีบางคนใช้คุณสมบัติที่สมบูรณ์อัตโนมัติพิเศษเช่นGit ทุบตีรถยนต์ที่สมบูรณ์ ความช้าของการทุบตีการทุบตีอาจเป็นผลมาจากคุณสมบัติที่สมบูรณ์แบบอัตโนมัติเหล่านั้นทำงานผิดปกติ

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

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