Налаштувавши для виявлення, якщо команда не існує, запропонуйте встановити


22

Чи 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на баш-подібний вихід The program 'progname' is currently not installed. You can install it by typing:або подібний.

Це можливо із ZSH?

Відповіді:


22

Ця функція надається пакетом. Ubuntu встановлює його за замовчуванням і робить його активним за замовчуванням у bash, але не в zsh. Просто додайте цей рядок до свого :command-not-found Встановити команду не знайдено~/.zshrc

. /etc/zsh_command_not_found

Це рішення спрацювало. Чи є спосіб позбутися рядка у висновку? (зауважте, що він був включений у вихід, як і The program 'progname' is currently not installed. You can install it by typing:частина) zsh: command not found: sysv-rc-conf
Thomas Ward

@EvilPhoenix: Де б то не було (окрім як всередині функції чи щось очевидно). Я не знаю про видалення zsh: command not foundлінії.
Жил 'ТАК - перестань бути злим'

Гаразд, я, мабуть, можу проігнорувати "команду не знайдено частини". Тому що пропонуємо встановити частину приємно, і приємно знати, що вона з’явилася, оскільки команда не існує;)
Thomas Ward

для повороту command not foundповідомлення, яке ви можете додати exitв кінці функції command_not_found_handlerв /etc/zsh_command_not_found.
jens_bo

4

Зверніть увагу, що ви можете додати перевірку, чи існує файл, якщо ви ділитесь своїм .zshrc у дистрибутивах, у яких немає /etc/zsh_command_not_foundфайлу:

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

Крім того, якщо ви використовуєте oh-my-zsh , то вже є плагін command-not-found, який ви можете додати до pluginsзмінної, яка робить те саме.


1

Якщо ви використовуєте 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

Це працює через функцію command_not_found_handle () в bash. bash забезпечує гачок, який в основному є функцією, яка викликається, коли команду не знайдено. Реалізація bash Ubuntu перехоплює його і виконує пошук пакетів, тоді як баш Debian - не (і те ж саме з zsh). Ви можете перевірити сторінку сторінки 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:~$

Це не є різницею в баші Debian і Ubuntu. Різниця полягає в тому, що Ubuntu встановлюється command-not-foundза замовчуванням, а Debian - ні. Функція вже існує і для zsh, вона просто не активована за замовчуванням.
Жиль "ТАК - перестань бути злим"

Це передбачає, що command_not_found не включений у систему. Однак це не те, що я шукаю. Сказавши це, відповідь від @Gilles більше відповідає тому, що я шукаю, я просто намагаюся зрозуміти, куди слід включити вказану ним лінію.
Thomas Ward

Це називається command_not_found_handlerв zsh. Див. Zsh.sourceforge.net/Doc/Release/Command-Execution.html .
Мікель

0

Крім того, якщо ви не хочете, щоб zsh мав цю поведінку 100% часу, ви можете вручну зробити щось на кшталт:

/usr/lib/command-not-found urxvt

або додати не знайдені команди до $ PATH


3
коли я запитав це, я хотів, щоб він працював увесь час: P
Thomas Ward
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.