Estou procurando um gancho bash/zsh , que é invocado quando um comando não é encontrado.
Digamos que eu execute algum executável arbitrário:
xyz foo --bar
- diga que o bash/zsh não pode encontrar o executável.
- existe uma maneira de lidar com "não encontrado" e, em seguida, carregar algumas bibliotecas no PATH dinamicamente depois disso?
algo assim:
function xyz {
if ! test -f xyz; then
load_libs xyz
fi
command -v xyz;
}
algo como esta função, mas seria para executáveis desconhecidos.
Então, genericamente, seria algo como:
function on_not_found {
if ! test -f "$1"; then
load_libs "$1"
fi
command -v "$@";
}
Ambos
zsh
ebash
têm funções de gancho que você pode definir para lidar com casos em que um comando não é encontrado. É chamadocommand_not_found_handle
inbash
ecommand_not_found_handler
inzsh
( inspirado embash
's, mas com o erro de digitação/nome incorreto corrigido ).Observe, no entanto, que eles são executados em um processo filho (sem mencionar que o comando pode não ser encontrado por um subshell), portanto, não pode fazer alterações em seu ambiente de shell.
Você poderia fazer:
zsh
As
IN_CNFH
partes para evitar recursão infinita se o comando ainda não puder ser encontrado depois de bem-load_lib
sucedido.Se você já tem um
command_not_found_handler
(alguns sistemas fornecem um em sua configuração padrão zsh para sugerir nomes de pacotes a serem instalados quando um comando não for encontrado), você pode inserir isso antes dele com algo como:festança
O equivalente no bash ficaria assim:
Ou a variante incremental caso já exista um
command_not_found_handle
: