O Bash 4.0 introduziu uma nova funcionalidade para manipular comandos que não são encontrados - ele chamará uma função nomeado command_not_found_handle
, se essa função existir. Você pode usar esse comportamento para interceptar chamadas para "programas" chamados dfk-NNN ou DFK-NNN e executá-los novamente como desejar. Já que estamos dependendo do comportamento 4.0, também usei os recursos de expansão de parâmetro de revestimento superior e de carcaça inferior.
command_not_found_handle() {
case "${1,,}" in
(dfk-?|dfk-??|dfk-???|dfk-????|dfk-?????)
echo dfkp "${1^^}" "${@:2}"
return 0
;;
(*)
printf 'bash: %s: command not found\n' "$1" >&2
return 127
;;
esac
}
Se você digitar um comando que não existe, o bash chama essa função com a linha de comando original. A declaração case
diminui o primeiro argumento para que seja mais simples compará-lo com os padrões dfk
necessários.
Se o comando começar com dfk-
e terminar com 1, 2, 3, 4 ou 5 caracteres (aperte isto para ser dígitos como achar melhor), então ele - atualmente ecoa, para depuração, mas então - - chama o programa dfkp
com o primeiro parâmetro sendo a versão maiúscula da entrada dfk inicial, seguida pelo restante da linha de comando.
Para comandos que não correspondem a dfk-NNNN
, ele cai e imprime uma mensagem de erro bash simulada para stderr e retorna 127. (Isso corresponde ao comportamento padrão, como se command_not_found_handle não existisse).
Uma sessão de amostra (com a depuração de eco instalada, pois não tenho um programa dfkp real):
$ dfk-1234
dfkp DFK-1234
$ dfk-18875 cat file.txt
dfkp DFK-18875 cat file.txt
$ some-other-command
bash: some-other-command: command not found
$ dfk-1
dfkp DFK-1
$ dfk-12345
dfkp DFK-12345