В оболочке bash, если вы поместите некоторую команду, которая не установлена в вашей системе, она выдает ошибку и также дает вам предложение по установке пакета. Например -
$ iostat
Command 'iostat' not found, but can be installed with:
sudo apt install sysstat
Мой личный фаворит - tcsh, но он не дает никаких предложений по установке пакета, в то время как некоторая команда не найдена. Как я могу получить предложение установки пакета (например, bash) в tcsh?
Магия работает из-за пакета command_not_found, который предоставляет функцию command_not_found_handle для bash и zsh.
Это работает в пакете из-за этого фрагмента в /etc/bash.bashrc ]
# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
function command_not_found_handle {
# check because c-n-f could've been removed in the meantime
if [ -x /usr/lib/command-not-found ]; then
/usr/lib/command-not-found -- "$1"
return $?
elif [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/share/command-not-found/command-not-found -- "$1"
return $?
else
printf "%s: command not found\n" "$1" >&2
return 127
fi
}
fi
Существует также файл /etc/zsh_command_not_found, который вы можете использовать для получения этого поведения для zsh - здесь функция называется command_not_found_handler.
Из быстрой поиск, не кажется, что zsh включает такую функцию, чтобы определить a command_not_found_handle. Так может быть и имя, другое, в этом случае вам просто нужно преобразовать фрагмент в bash и включить его в свой ~/.tcshrc, иначе вы не сможете!
Магия работает из-за пакета command_not_found, который предоставляет функцию command_not_found_handle для bash и zsh.
Это работает в пакете из-за этого фрагмента в /etc/bash.bashrc ]
# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
function command_not_found_handle {
# check because c-n-f could've been removed in the meantime
if [ -x /usr/lib/command-not-found ]; then
/usr/lib/command-not-found -- "$1"
return $?
elif [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/share/command-not-found/command-not-found -- "$1"
return $?
else
printf "%s: command not found\n" "$1" >&2
return 127
fi
}
fi
Существует также файл /etc/zsh_command_not_found, который вы можете использовать для получения этого поведения для zsh - здесь функция называется command_not_found_handler.
Из быстрой поиск, не кажется, что zsh включает такую функцию, чтобы определить a command_not_found_handle. Так может быть и имя, другое, в этом случае вам просто нужно преобразовать фрагмент в bash и включить его в свой ~/.tcshrc, иначе вы не сможете!