Use o command-not-foundgancho do Ubuntu , conforme especificado em Command Not Found Magic . Atualmente, é usado para sugerir pacotes para instalação. Consulte o /usr/share/doc/command-not-found/READMEque deve ser instalado no seu sistema.
Melhor ainda, porque não depende do command-not-foundpacote, (re) implemente o Bash interno command_not_found_handlepara fazer um xdg-openif se $1for um arquivo existente e delegar todos os outros casos à implementação anterior.
# 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
}
Boa pergunta, característica bacana.
Pensando um pouco mais: você pode não gostar tanto do recurso quanto pensa, a menos que também estenda o bash_completionmanipulador. Imagine querer abrir file-with-a-long-name.txte depois definir
alias o='xdg-open'
fará (aproximadamente) quatro pressionamentos de tecla suficientes:
o f<Tab><Enter>
Considerando que digitar o nome completo do arquivo leva um 26 tedioso - e isso exclui o retrocesso nos erros inevitáveis.
command_not_found_handle()função/etc/bash.bashrcpara verificar e abrir xdg-arquivo no mesmo diretório?