Quando bash
algum comando inexistente é executado, a mensagem de erro correspondente aparece:
$ non-existent-command
non-existent-command: command not found
É possível personalizar esse comportamento?
Eu gostaria de alcançar o seguinte. Quando o comando inserido corresponder, por exemplo, ao padrão s\d\d\d
, ele deverá ser tratado de maneira especial:
s
deve ser extraído e usado como um comando,\d\d\d
deve ser extraído e usado como argumento para os
comando.- O comando criado pela análise acima deve ser executado.
Isto normalmente pode ser conseguido por meio de uma função chamada s
que recebe os argumentos necessários. Uma chamada normal é usada para executar tal função. Por exemplo:
s 123
Mas quero customizar o comportamento para bash
poder executar tal função com, por exemplo, as seguintes chamadas:
s123
s500
Tentei encontrar informações relacionadas man bash
pelas seguintes palavras-chave: overload
, custom
, override
e não tive sucesso.
Pelo que entendi, preciso personalizar de alguma forma o bash
manipulador usado para processar a entrada. Não investiguei bash
o código-fonte para entender se isso é viável.
Será melhor encontrar uma solução que seja utilizável para qualquer shell.
Provavelmente criar um bash
wrapper/adaptador personalizado com a lógica necessária e usá-lo em vez do bash
binário padrão resolverá isso.
Em
bash
:Para sua informação,
127
é o status de saída padrão "comando não encontrado". Consulte https://www.gnu.org/software/bash/manual/bash.html#Command-Search-and-Execution para obter mais informações.Estou usando apenas
BASH_REMATCH[]
o procedimento acima para chamars
porque sei que é seguro fazê-lo, pois$*
contém o comando como uma única letra e seus argumentos com apenas 3 dígitos. Para algo mais complicado, consulte https://mywiki.wooledge.org/BashFAQ/ 050 .Não há solução que funcione em todos os shells, consulte Como definir uma função que lida com `comando não encontrado`? para encontrar informações sobre abordagens acima para alguns outros shells.