Konfigurasi untuk mendeteksi jika suatu perintah tidak ada, sarankan instalasi

22

Dapatkah zshshell dikonfigurasikan untuk menunjukkan apa yang bashmuncul ketika perintah tidak ada, mirip dengan ini:

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

daripada prompt ZSH:

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

Catatan Saya tidak ingin mengubah prompt itu sendiri, tetapi saya ingin mengubah hasilnya dari zsh: command not foundmenjadi bash-like The program 'progname' is currently not installed. You can install it by typing:atau sejenisnya.

Apakah ini mungkin dengan ZSH?

Thomas Ward
sumber

Jawaban:

22

Fitur ini disediakan oleh paket. Ubuntu menginstalnya secara default, dan membuatnya aktif secara default di bash tetapi tidak di zsh. Tambahkan saja baris ini ke :command-not-found Instal perintah-tidak-ditemukan~/.zshrc

. /etc/zsh_command_not_found
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Solusi ini berhasil. Apakah ada cara untuk menghilangkan garis di output, kalau begitu? (perhatikan bahwa itu termasuk dalam output, seperti juga The program 'progname' is currently not installed. You can install it by typing:bagian) zsh: command not found: sysv-rc-conf
Thomas Ward
@ EvilPhoenix: Di mana saja akan melakukan (kecuali di dalam suatu fungsi atau sesuatu yang jelas). Saya tidak tahu tentang menghapus zsh: command not foundgaris.
Gilles 'SO- stop being evil'
Oke, saya mungkin bisa mengabaikan "perintah tidak menemukan bagian". Karena bagian instalasi yang disarankan bagus, dan bagus untuk mengetahui bahwa itu muncul karena perintah tidak ada;)
Thomas Ward
untuk membalikkan command not foundpesan Anda dapat menambahkan exitdi akhir fungsi command_not_found_handlerdi /etc/zsh_command_not_found.
jens_bo
4

Perhatikan bahwa Anda mungkin ingin menambahkan tanda centang jika file ada jika Anda membagikan .zshrc di seluruh distribusi yang tidak memiliki /etc/zsh_command_not_foundfile:

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

Juga, jika Anda menggunakan oh-my-zsh , sudah ada plugin command-not-found,, yang dapat Anda tambahkan ke pluginsvariabel Anda yang melakukan hal yang sama.

zgerd
sumber
1

Jika Anda menggunakan oh-my-zsh , Anda bisa mencari "plugins" di dalam .zshrc.

Tambahkan command-not-foundplugin ke daftar plugin untuk autoload (plugin ini sudah diinstal secara default).

Seperti ini:

# 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)
qaisjp
sumber
0

Cara kerjanya adalah melalui fungsi command_not_found_handle () di bash. bash menyediakan sebuah hook yang pada dasarnya adalah sebuah fungsi yang dipanggil ketika sebuah perintah tidak ditemukan. Implementasi bash Ubuntu menjebaknya dan melakukan pencarian paket, sedangkan bash Debian tidak (dan sama dengan zsh). Anda mungkin ingin memeriksa halaman manual zsh untuk melihat apakah itu memiliki fungsi yang sama.

Inilah cara Anda memulai, berharap zsh sama.

mpandit@mpandit-ubuntu:~$ command_not_found_handle() {echo 'Handler: Command not found!';}
mpandit@mpandit-ubuntu:~$ ddaadada
'Handler: Command not found!
mpandit@mpandit-ubuntu:~$
lobster1234
sumber
Ini bukan perbedaan dalam pesta Debian dan Ubuntu. Perbedaannya adalah bahwa Ubuntu menginstal command-not-foundsecara default dan Debian tidak. Fitur sudah ada untuk zsh juga, hanya saja tidak diaktifkan secara default.
Gilles 'SO- stop being evil'
Ini mengasumsikan bahwa command_not_found tidak termasuk dalam sistem. Namun bukan itu yang saya cari. Karena itu, jawaban dari @Gilles lebih sesuai dengan apa yang saya cari, saya hanya mencoba mencari tahu di mana untuk memasukkan baris yang dia tentukan.
Thomas Ward
Ini disebut command_not_found_handlerdalam zsh. Lihat zsh.sourceforge.net/Doc/Release/Command-Execution.html .
Mikel
0

Juga jika Anda tidak ingin zsh memiliki perilaku ini 100% dari waktu Anda bisa melakukan sesuatu seperti:

/usr/lib/command-not-found urxvt

atau tambahkan perintah-tidak-ditemukan ke $ PATH Anda

Jason Axelson
sumber
3
ketika saya menanyakan hal ini, saya ingin itu berfungsi sepanjang waktu: P
Thomas Ward