Настройка для обнаружения, если команда не существует, предложить установку

Может ли оболочка 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?

22
задан 3 December 2013 в 17:42

5 ответов

Эта функция предоставляется пакетом command-not-found Install command-not-found . Ubuntu устанавливает его по умолчанию и делает его активным по умолчанию в bash, но не в zsh. Просто добавьте эту строку в ваш ~/.zshrc:

. /etc/zsh_command_not_found
0
ответ дан 3 December 2013 в 17:42

Если вы используете 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)
0
ответ дан 3 December 2013 в 17:42

Обратите внимание, что вы можете добавить проверку, если файл существует, если вы делитесь своим .zshrc между дистрибутивами, у которых нет файла /etc/zsh_command_not_found:

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

Также, если Используя oh-my-zsh , уже есть плагин command-not-found, который вы можете добавить в переменную plugins, которая делает то же самое.

0
ответ дан 3 December 2013 в 17:42

Способ работает через функцию 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:~$
0
ответ дан 3 December 2013 в 17:42

Также, если вы не хотите, чтобы zsh имел такое поведение в 100% случаев, вы можете просто вручную сделать что-то вроде:

/usr/lib/command-not-found urxvt

или добавить команду не найдена. в ваш $ PATH

0
ответ дан 3 December 2013 в 17:42

Другие вопросы по тегам:

Похожие вопросы: