Bir komut bulunup bulunmadığını tespit etmek için yapılandırma


22

Can zshkabuk neyi gösterecek şekilde yapılandırılabilir bashkomut benzer Buna, var olmayan biriyle gösterileri:

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 isteminden ziyade:

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

Not İstemin kendisini değiştirmek istemiyorum, ancak sonucu zsh: command not foundbash benzeri çıktısıyla değiştirmek istiyorum The program 'progname' is currently not installed. You can install it by typing:.

Bu ZSH ile mümkün mü?

Yanıtlar:


22

Bu özellik paket tarafından sağlanır . Ubuntu varsayılan olarak kurar ve bash'da varsayılan olarak aktif hale getirir, fakat zsh'de değil. Sadece bu satırı şu adrese ekle :command-not-found Komut bulunamadı bulunamadı~/.zshrc

. /etc/zsh_command_not_found

Bu çözüm işe yaradı. Öyleyse çıktıdaki çizgiden kurtulmanın bir yolu var mı? (çıktının The program 'progname' is currently not installed. You can install it by typing:parçaya dahil edildiğine dikkat edin ) zsh: command not found: sysv-rc-conf
Thomas Ward

@EvilPhoenix: Herhangi bir yer (bir işlevin içinde veya belli bir şeyin dışında) yapar. zsh: command not foundÇizgiyi kaldırmayı bilmiyorum .
Gilles 'SO- kötü olmayı bırak'

Tamam, muhtemelen "komut bulunamadı" komutunu görmezden gelebilirim. Önerilen kurulum kısmı iyi, çünkü bir komut olmadığı için ortaya çıktığını bilmek güzel;)
Thomas Ward

Bu devre kadar command not foundmesajın ekleyebilir exitişlevi sonunda command_not_found_handleryer /etc/zsh_command_not_found.
jens_bo

4

.Zshrc'nizin bir /etc/zsh_command_not_founddosyayı olmayan dağıtımlar arasında paylaşıyorsanız, dosyanın olup olmadığını kontrol etmek isteyebileceğinizi unutmayın :

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

Ayrıca, oh-my-zsh kullanıyorsanız , zaten aynı şeyi yapan değişkeninize command-not-foundekleyebileceğiniz bir eklenti var plugins.


1

Eğer oh-my-zsh kullanıyorsanız , bunun yerine “eklentileri” aratın .zshrc.

command-not-foundEklentiyi otomatik yüklenecek eklentiler listesine ekleyin (bu eklenti zaten varsayılan olarak yüklenmiştir).

Bunun gibi:

# 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

Çalışma şekli bash içinde command_not_found_handle () işlevinden geçer. bash, bir komut bulunmadığında temelde çağrılan bir fonksiyon olan bir kanca sağlar. Ubuntu'nun bash uygulaması onu yakalar ve bir paket arama yapar, Debian'ın bash'ı ise (ve zsh ile aynı değildir). Bunun benzer bir işleve sahip olup olmadığını görmek için zsh'nin man sayfasını kontrol etmek isteyebilirsiniz.

İşte nasıl başlayabileceğiniz, zsh'nin de benzer olacağını ümit ediyorum.

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

Bu Debian ve Ubuntu’nun bashında bir fark değil. Aradaki fark Ubuntu'nun command-not-foundvarsayılan olarak kurması ve Debian'ın yapmamasıdır. Bu özellik zaten zsh için de var, varsayılan olarak etkin değil.
Gilles 'SO- kötülük olmayı'

Bu, command_not_found'un sisteme dahil olmadığını varsaymaktadır. Ancak aradığım şey bu değil. Bunu söyledikten sonra, @Gilles'den gelen cevap aradığım şey boyunca daha fazla, sadece onun belirttiği çizgiyi nereye ekleyeceğimi bulmaya çalışıyorum.
Thomas Ward

Buna command_not_found_handlerzsh denir . Bkz zsh.sourceforge.net/Doc/Release/Command-Execution.html .
Mikel

0

Ayrıca, zsh'nin bu davranışı gerçekleştirmesini istemiyorsanız, zamanın% 100'ünde manuel olarak yapabilirsiniz:

/usr/lib/command-not-found urxvt

veya $ PATH’nize bulunamayan bir komut ekleyin


3
bunu sorduğumda her zaman çalışmasını istedim: P
Thomas Ward
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.