Can the zsh
shell be configured to show what bash
shows when a command does not exist, similarly to this:
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
rather than the ZSH prompt:
[kahless /home/teward]% sysv-rc-conf
zsh: command not found: sysv-rc-conf
Note I do not want to change the prompt itself, but I want to change the result from zsh: command not found
to a bash-like output of The program 'progname' is currently not installed. You can install it by typing:
or similar.
Is this possible with ZSH?
This feature is provided by the
command-not-found
package. Ubuntu installs it by default, and makes it active by default in bash but not in zsh. Just add this line to your~/.zshrc
:Note that you might want to add a check if the file exists if you are sharing your .zshrc across distributions that do not have a
/etc/zsh_command_not_found
file:Also, in case you're using oh-my-zsh, there already is a plugin,
command-not-found
, that you can add to yourplugins
variable that does the same thing.If you are using oh-my-zsh, you can just instead looks for "plugins" inside your
.zshrc
.Add the
command-not-found
plugin to the list of plugins to autoload (this plugin is already installed by default).Like this:
The way it works is through the command_not_found_handle() function in bash. bash provides a hook which is basically a function that is invoked when a command is not found. Ubuntu's bash implementation traps it and does a package search, while Debian's bash does not (and same with zsh). You may want to check out zsh's manpage to see if that has a similar function.
Here is how you can get started, hoping zsh is similar.
Also if you don't want zsh to have this behavior 100% of the time you can just manually do something like:
/usr/lib/command-not-found urxvt
or add command-not-found to your $PATH