Використовуйте command-not-found
гачок Ubuntu , як зазначено в Command Not Found Magic . В даний час використовується для пропонування пакетів для встановлення. Дивіться, /usr/share/doc/command-not-found/README
що слід встановити у вашій системі.
Ще краще, оскільки це не залежить від command-not-found
пакету, (повторно) реалізуйте вбудований Bash, command_not_found_handle
щоб зробити, xdg-open
якщо $1
це вже існуючий файл, і делегувати всі інші випадки до попередньої реалізації.
# Save the existing code for the handler as prev_command_not_found_handle.
# Bit of a hack, as we need to work around bash's lack of lexical closure,
# and cover the case when it is not defined at all.
eval "prev_$(declare -f command_not_found_handle)" >& /dev/null \
|| prev_command_not_found_handle () {
echo "$1: command not found" 1>&2
return 127
}
# Define the new implementation, delegating to prev_handler.
command_not_found_handle () {
if [ -f "$1" ]; then
xdg-open "$1"
else
prev_command_not_found_handle "$@"
fi
}
Хороше запитання, вишукана риса.
Продумавши це ще трохи: функція може вам не сподобатися так сильно, як ви думаєте, якщо ви також не подовжите bash_completion
обробник. Уявіть, що хочете відкрити file-with-a-long-name.txt
, а потім налаштуйте
alias o='xdg-open'
зробить (приблизно) чотири натискання клавіш:
o f<Tab><Enter>
Тоді як введення повного імені файлу вимагає втомливих 26 - і це виключає зворотні пробіли через неминучі помилки друку.
command_not_found_handle()
функцію/etc/bash.bashrc
для перевірки та відкриття файлу xdg у тому самому каталозі?