ทำให้ทุบตีหยุดชั่วคราวหลังจากคำสั่งไม่ดีคืออะไร?


23

เมื่อคุณพิมพ์คำสั่งที่ไม่ดีให้พูดว่าคุณต้องการทำ:

$ cd ..
$ ls

แต่คุณพิมพ์เร็วเกินไปและสิ้นสุดการกดปุ่มป้อนระหว่าง l และ s ดังนั้นคุณจะได้รับ:

$ cd ..
$ l
sbash: l: command not found...

สิ่งนี้เกิดขึ้นตลอดเวลาเมื่อเราพิมพ์เร็ว สิ่งที่ฉันอยากรู้คือที่มาของ 2.5 วินาที (ในระบบของฉัน) หยุดชั่วคราวหลังจากข้อความคำสั่งไม่ดีปรากฏบนหน้าจอ ดูเหมือนว่าฉันจะรับรู้คำสั่งที่ไม่ดีทันทีพิมพ์ข้อความผิดพลาดเกี่ยวกับมัน แต่แล้วก็เพื่อความสนุกสนานรอ 2.5 วินาทีก่อนที่จะกลับฉันไปที่บรรทัดคำสั่ง อะไรทำให้เกิดสิ่งนี้ มีวิธีแก้ไขปัญหานี้หรือไม่? มันน่ารำคาญนิดหน่อย แต่ฉันต้องการกำจัดมัน :)

แก้ไข: เรียกใช้ระบบ Fedora 16


คุณลืมพูดถึงระบบปฏิบัติการที่คุณใช้อยู่
Daniel Beck

โอ้โหคุณไม่สมนามกับ ls เหรอ? :)
dotjoe

คำตอบ:


42

พฤติกรรมประเภทนี้เกิดจากเครื่องมือที่ติดตั้งบ่อยครั้งในการแจกแจงบางอย่างที่เกี่ยวกับการทุบตี เบ็ดนี้ทำให้มันเพื่อให้ถ้าคุณพยายามเรียกใช้คำสั่งและคำสั่งที่ไม่มีอยู่แล้วทุบตีจะค้นหาไฟล์ที่มีอยู่ในที่เก็บที่กำหนดค่าและบอกคุณว่าแพคเกจที่คุณจะต้องติดตั้งเพื่อให้ได้คำสั่งนั้น

หากคุณไม่ได้อยู่ในระบบ Debian คุณจะต้องการดูโปรไฟล์ไฟล์ bash startup ของคุณและอื่น ๆ และดูว่ามีอะไรกำหนดฟังก์ชั่นที่มีชื่อcommand_not_found_handleหรือไม่ หากมีการกำหนดฟังก์ชันทุบตีมันจะถูกเรียกเมื่อใดก็ตามที่คุณเรียกใช้คำสั่งและไม่พบโปรแกรมที่เหมาะสมในเส้นทางการค้นหาของคุณ หากคุณเรียกใช้typset | lessและเรียกดูผลลัพธ์ที่คุณจะเห็นcommand_not_found_handle()ฟังก์ชั่นถ้ามันได้รับการกำหนด

บน Debian / Ubuntu แพคเกจที่ให้บริการลักษณะนี้เป็นคำสั่งที่ไม่พบ หากคุณล้างสิ่งนั้นคุณจะปิดการค้นหาซึ่งทำให้สิ่งต่าง ๆ ช้าลง

นี่คือตัวอย่าง

# command-not-found installed
$ time pwgen
The program 'pwgen' is currently not installed.  To run 'pwgen' please ask your administrator to install the package 'pwgen'
pwgen: command not found

real    0m0.074s
user    0m0.032s
sys     0m0.040s

# purge command-not-found and restart bash
$ time pwgen
-bash: pwgen: command not found

real    0m0.002s
user    0m0.000s
sys     0m0.000s

เวลาที่แน่นอนจะแตกต่างกันสำหรับคุณ ฉันทำการทดสอบบนเซิร์ฟเวอร์ที่ค่อนข้างอ้วน


10
ในกรณีของฉันใน fedora มันกลายเป็นแพคเกจที่เรียกว่า: PackageKit คำสั่งไม่พบ
Fuu

6

ส่วนหนึ่งของคำถามคือ "มีวิธีแก้ไข (ใน Fedora) หรือไม่" มี: ที่ด้านล่างของไฟล์. bashrc ของคุณเพิ่มคำสั่ง

unset command_not_found_handle

คุณอาจต้องการที่จะทำมันในตอนท้ายของ. bashrc ของคุณ (หรือใกล้กับ) เพราะคุณอาจใช้ / etc / bashrc หรือสคริปต์ทุบตีอื่น ๆ ที่ด้านบนของ. bashrc ของคุณ


5

บน fedora พฤติกรรมนี้สามารถควบคุมได้โดยการเปลี่ยน/etc/PackageKit/CommandNotFound.confไฟล์กำหนดค่า

การตั้งค่าSoftwareSourceSearch=falseจะกำจัดความล่าช้าเนื่องจากจะไม่พยายามค้นหาแพ็คเกจด้วยคำสั่งที่หายไปโดยใช้ตัวจัดการแพคเกจ

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

ชนทั้งสองอย่างMaxSearchTimeเพื่อให้ได้ผลลัพธ์ที่เป็นประโยชน์หรือปิดการใช้งานSoftwareSourceSearchเพื่อขจัดความล่าช้าทั้งหมด

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