การกำหนดค่าเพื่อตรวจสอบว่าคำสั่งไม่มีอยู่แนะนำการติดตั้งหรือไม่


22

สามารถzshกำหนดค่าเปลือกเพื่อแสดงสิ่งที่bashแสดงเมื่อไม่มีคำสั่งคล้ายกับสิ่งนี้:

kahless:~$ sysv-rc-conf  
The program 'sysv-rc-conf' is currently not installed.  You can install it by typing:  
sudo apt-get install sysv-rc-conf

มากกว่าพรอมต์ ZSH:

[kahless /home/teward]% sysv-rc-conf  
zsh: command not found: sysv-rc-conf

หมายเหตุฉันไม่ต้องการเปลี่ยนพรอมต์ แต่ฉันต้องการเปลี่ยนผลลัพธ์จากzsh: command not foundเป็นเอาต์พุตเหมือน bash The program 'progname' is currently not installed. You can install it by typing:หรือคล้ายกัน

เป็นไปได้ด้วย ZSH?

คำตอบ:


22

คุณลักษณะนี้มีให้ในแพ็คเกจ Ubuntu ติดตั้งตามค่าเริ่มต้นและทำให้ใช้งานเป็นค่าเริ่มต้นในทุบตี แต่ไม่อยู่ใน zsh เพียงเพิ่มบรรทัดนี้ใน:command-not-found ติดตั้งคำสั่งที่ไม่พบ~/.zshrc

. /etc/zsh_command_not_found

วิธีนี้ใช้ได้ผล มีวิธีกำจัดบรรทัดในผลลัพธ์หรือไม่ (โปรดทราบว่ามันรวมอยู่ในผลลัพธ์เช่นเดียวกับชิ้นThe program 'progname' is currently not installed. You can install it by typing:ส่วน) zsh: command not found: sysv-rc-conf
โธมัสวอร์ด

@EvilPhoenix: ทุกที่ที่จะทำ (ยกเว้นในฟังก์ชั่นหรือสิ่งที่เห็นได้ชัด) ฉันไม่รู้เกี่ยวกับการลบzsh: command not foundบรรทัด
Gilles 'หยุดความชั่วร้าย'

ตกลงฉันอาจเพิกเฉยไปที่ "command not found part" เพราะแสดงให้เห็นส่วนที่ติดตั้งเป็นสิ่งที่ดีและมีความสุขในการ knokw ว่ามันขึ้นมาเพราะมีอยู่คำสั่งไม่ได้;)
โทมัสวอร์ด

ที่จะหันของcommand not foundข้อความที่คุณสามารถเพิ่มexitในตอนท้ายของการทำงานในcommand_not_found_handler /etc/zsh_command_not_found
jens_bo

4

โปรดทราบว่าคุณอาจต้องการเพิ่มการตรวจสอบว่ามีไฟล์อยู่หรือไม่หากคุณแบ่งปัน. zshrc ของคุณในการกระจายที่ไม่มี/etc/zsh_command_not_foundไฟล์:

[[ -a "/etc/zsh_command_not_found" ]] && . /etc/zsh_command_not_found

นอกจากนี้ในกรณีที่คุณใช้oh-my-zshมีปลั๊กอินอยู่แล้วcommand-not-foundซึ่งคุณสามารถเพิ่มpluginsตัวแปรของคุณที่ทำสิ่งเดียวกัน


1

หากคุณกำลังใช้oh-my-zshคุณสามารถค้นหา "ปลั๊กอิน" ภายในตัวคุณ.zshrcได้

เพิ่มcommand-not-foundปลั๊กอินในรายการปลั๊กอินไปยัง autoload (ปลั๊กอินนี้ติดตั้งไว้แล้วตามค่าเริ่มต้น)

อย่างนี้:

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git command-not-found)

0

วิธีการทำงานคือผ่านฟังก์ชัน command_not_found_handle () ใน bash bash จัดให้มี hook ซึ่งโดยทั่วไปจะเป็นฟังก์ชันที่ถูกเรียกใช้เมื่อไม่พบคำสั่ง การใช้งานทุบตีของ Ubuntu กับดักมันและทำการค้นหาแพ็คเกจในขณะที่การทุบตีของเดเบียนไม่ได้ (และเหมือนกับ zsh) คุณอาจต้องการตรวจสอบ manpage ของ zsh เพื่อดูว่ามีฟังก์ชั่นที่คล้ายกันหรือไม่

นี่คือวิธีที่คุณสามารถเริ่มต้นหวังว่า zsh จะคล้ายกัน

mpandit@mpandit-ubuntu:~$ command_not_found_handle() {echo 'Handler: Command not found!';}
mpandit@mpandit-ubuntu:~$ ddaadada
'Handler: Command not found!
mpandit@mpandit-ubuntu:~$

นี่ไม่ใช่ความแตกต่างในการทุบตี Debian และ Ubuntu ความแตกต่างคือการติดตั้ง Ubuntu command-not-foundโดยค่าเริ่มต้นและ Debian ไม่ได้ คุณลักษณะนี้มีอยู่แล้วสำหรับ zsh ด้วยเช่นกันมันไม่ได้เปิดใช้งานโดยค่าเริ่มต้น
Gilles 'หยุดความชั่วร้าย'

สิ่งนี้จะถือว่า command_not_found ไม่ได้รวมอยู่ในระบบ อย่างไรก็ตามมันไม่ใช่สิ่งที่ฉันกำลังมองหา ต้องบอกว่าคำตอบจาก @Gilles นั้นมีมากกว่าสิ่งที่ฉันกำลังมองหาอยู่ฉันพยายามที่จะหาว่าจะรวมสายที่เขาระบุไว้อย่างไร
Thomas Ward

มันเรียกว่าcommand_not_found_handlerใน zsh ดูzsh.sourceforge.net/Doc/Release/Command-Execution.html
มิเคล

0

นอกจากนี้หากคุณไม่ต้องการให้ zsh มีพฤติกรรมนี้ 100% คุณสามารถทำสิ่งต่างๆด้วยตนเองดังนี้:

/usr/lib/command-not-found urxvt

หรือเพิ่มคำสั่งที่ไม่พบใน $ PATH ของคุณ


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