Может ли оболочка zsh
быть настроена для отображения того, что показывает bash
, когда команда не существует, аналогично этому:
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:
[kahless /home/teward]% sysv-rc-conf
zsh: command not found: sysv-rc-conf
Примечание. Я не хочу изменять само приглашение, но я хочу изменить результат с zsh: command not found
на вывод типа «bash», равный The program 'progname' is currently not installed. You can install it by typing:
или аналогичный.
Это возможно с ZSH?
Эта функция предоставляется пакетом command-not-found
. Ubuntu устанавливает его по умолчанию и делает его активным по умолчанию в bash, но не в zsh. Просто добавьте эту строку в ваш ~/.zshrc
:
. /etc/zsh_command_not_found
Если вы используете oh-my-zsh , вы можете просто искать «плагины» внутри вашего .zshrc
.
Добавьте плагин command-not-found
в список плагинов для автоматической загрузки (этот плагин уже установлен по умолчанию).
Как это:
# 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)
Обратите внимание, что вы можете добавить проверку, если файл существует, если вы делитесь своим .zshrc между дистрибутивами, у которых нет файла /etc/zsh_command_not_found
:
[[ -a "/etc/zsh_command_not_found" ]] && . /etc/zsh_command_not_found
Также, если Используя oh-my-zsh , уже есть плагин command-not-found
, который вы можете добавить в переменную plugins
, которая делает то же самое.
Способ работает через функцию command_not_found_handle () в bash. bash предоставляет хук, который в основном является функцией, которая вызывается, когда команда не найдена. Реализация bash в Ubuntu перехватывает его и выполняет поиск пакетов, а bash в Debian - нет (и то же самое с zsh). Возможно, вы захотите проверить man-страницу zsh, чтобы узнать, имеет ли она подобную функцию.
Вот как вы можете начать, надеясь, что zsh похож.
mpandit@mpandit-ubuntu:~$ command_not_found_handle() {echo 'Handler: Command not found!';}
mpandit@mpandit-ubuntu:~$ ddaadada
'Handler: Command not found!
mpandit@mpandit-ubuntu:~$
Также, если вы не хотите, чтобы zsh имел такое поведение в 100% случаев, вы можете просто вручную сделать что-то вроде:
/usr/lib/command-not-found urxvt
или добавить команду не найдена. в ваш $ PATH