Bater. Inserir uma chamada de função na pilha de chamadas

votos
-1

Eu estou tentando criar algum tipo de função do sistema de gancho para um script bash. O script bash principal já existe e o ponto é para ser capaz de criar algum tipo de sistema de plugins, a fim de deixar os usuários para criar scripts bash pequenos que contêm seu próprio material sob esses três métodos:

  • Prehooking -> usuários serão capazes de criar uma função que será executada antes que a função do script principal que escolher
  • Substituindo -> usuários serão capazes de substituir completamente a função do script principal, a fim de reescrevê-lo com conteúdo personalizado
  • Posthooking -> usuários serão capazes de criar uma função que será executado imediatamente após a função do script principal que escolher

Já trabalhando o sistema plugins para prehooking e substituindo funções. O script principal analisa os pequenos plugins scripts e seguindo algumas regras e validações (nomenclatura etc ...) se o plugin é bem feito ele funciona.

Meu problema é tentar criar o recurso posthooking e eu estou à procura de ideias. A razão é porque para prehooking, eu reescrever toda a função de fazer um sed sobre o seu conteúdo e busca a primeira {aparição para ser substituído por { call_to_prehooke funciona como um encanto. Mas eu não posso fazer o mesmo para posthooking. Eu não posso substituir a última aparição do }para definir algo como call_to_posthook }porque se a função tem um retorno que não vai funcionar. Isso posthook nunca será alcançado.

Agora eu estou lutando sobre se poderia ser possível injetar uma chamada de função na pilha de chamadas ou algo parecido. Não tenho certeza se em bash a árvore de chamadas pode ser verificado mesmo antes de alcançá-lo.

Um pouco PoC para melhor entendimento:

#!/bin/bash
#Main script

function main() {
    magic_function
    one
    two
}

function one() {
    echo one
}

function two() {
    echo two
}

function magic_function() {
    echo this function parses plugins and execute needed stuff to modify functions
    echo I hope to find some way here to do possible the posthooking
}

#!/bin/bash
#Plugin done by somebody

function posthook_one() {
    echo stuff to be executed after function one of the main script
}

Eu acho que para executar uma posthooking da função um que poderia ser feito realizando uma prehooking da função dois, mas isso não é uma idéia válida para mim devido a complexidade do roteiro real e, claro, porque dessa forma, última função não podia ser posthooked.

Qualquer ideia? Obrigado.

Publicado 10/10/2019 em 00:56
fonte usuário
Em outras línguas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more