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
package. Ubuntu installs it by default, and makes it active by default in bash but not in zsh. Just add this line to your
command-not-found
~/.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