Configurando para detectar se um comando não existe, sugerir instalação

21

O shell zsh pode ser configurado para mostrar o que bash mostra quando um comando não existe, da mesma forma:

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

em vez do prompt do ZSH:

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

Nota: não desejo alterar o prompt em si, mas quero alterar o resultado de zsh: command not found para uma saída semelhante a bash de The program 'progname' is currently not installed. You can install it by typing: ou similar.

Isso é possível com o ZSH?

    
por Thomas Ward 14.04.2011 / 03:45

5 respostas

20

Este recurso é fornecido pelo command-not-found pacote . O Ubuntu o instala por padrão e o torna ativo por padrão no bash, mas não no zsh. Basta adicionar esta linha ao seu ~/.zshrc :

. /etc/zsh_command_not_found
    
por Gilles 15.04.2011 / 00:48
4

Observe que você pode querer adicionar uma verificação se o arquivo existir se você estiver compartilhando seu .zshrc entre as distribuições que não possuem um arquivo /etc/zsh_command_not_found :

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

Além disso, caso você esteja usando oh-my-zsh , já existe um plugin, command-not-found , que você pode adicionar à sua variável plugins que faz a mesma coisa.

    
por zgerd 19.05.2014 / 19:38
1

Se você estiver usando o oh-my-zsh , você pode apenas procurar por "plugins" dentro do seu .zshrc .

Adicione o command-not-found plugin à lista de plugins autoload (este plugin já está instalado por padrão).

Assim:

# 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)
    
por qaisjp 29.12.2016 / 16:18
0

A maneira como funciona é através da função command_not_found_handle () no bash. O bash fornece um gancho que é basicamente uma função que é invocada quando um comando não é encontrado. A implementação bash do Ubuntu captura-o e faz uma pesquisa de pacotes, enquanto o bash do Debian não (e mesmo com o zsh). Você pode querer verificar a manpage do zsh para ver se tem uma função similar.

Aqui está como você pode começar, esperando que o zsh seja parecido.

mpandit@mpandit-ubuntu:~$ command_not_found_handle() {echo 'Handler: Command not found!';}
mpandit@mpandit-ubuntu:~$ ddaadada
'Handler: Command not found!
mpandit@mpandit-ubuntu:~$
    
por lobster1234 14.04.2011 / 05:59
0

Além disso, se você não quiser que o zsh tenha esse comportamento 100% do tempo, basta fazer algo manualmente assim:

/usr/lib/command-not-found urxvt

ou adicione o comando não encontrado ao seu $ PATH

    
por Jason Axelson 02.01.2012 / 03:59

Tags