Bash. Inserire una chiamata di funzione in stack di chiamate

voti
-1

Sto cercando di creare una sorta di funzione di sistema di aggancio per uno script bash. Lo script bash principale esiste già e il punto è quello di essere in grado di creare una sorta di sistema di plugin per permettere agli utenti di creare script bash piccoli contenenti le proprie cose in questi tre metodi:

  • Prehooking -> gli utenti saranno in grado di creare una funzione che sarà eseguito prima che la funzione dello script principale che scelgono
  • Override -> gli utenti saranno in grado di eseguire l'override del tutto una funzione dello script principale, al fine di riscrivere con contenuti personalizzati
  • Posthooking -> gli utenti saranno in grado di creare una funzione che verrà eseguito immediatamente dopo una funzione dello script principale che scelgono

Ho già lavorando il sistema di plugin per prehooking e le funzioni di override. Lo script principale analizza i piccoli plugin script e seguendo alcune regole e le convalide (nomenclatura ecc ...) se il plugin è ben fatto funziona.

Il mio problema sta cercando di creare la funzione posthooking e sto cercando idee. Il motivo è perché per prehooking, riscrivo l'intera funzione facendo un sed sul suo contenuto e la ricerca la prima {apparizione per essere sostituito da { call_to_prehooke funziona come un fascino. Ma non posso fare lo stesso per posthooking. Non posso sostituire l'ultima apparizione del }per impostare qualcosa di simile call_to_posthook }, perché se la funzione ha un ritorno non funzionerà. Quel posthook non verrà mai raggiunto.

Ora sto lottando su se potesse essere possibile iniettare una chiamata di funzione nello stack di chiamate o qualcosa del genere. Non sono sicuro se in bash l'albero delle chiamate può essere controllato anche prima di raggiungerlo.

Un po 'PoC per una migliore comprensione:

#!/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
}

Credo che per eseguire un posthooking di funzione di uno che potrebbe essere fatto eseguendo un prehooking di funzione a due, ma che non è un'idea valida per me a causa della complessità dello script vero e proprio e, naturalmente, perché in tal modo, ultima funzione non poteva essere posthooked.

Qualche idea? Grazie.

È pubblicato 10/10/2019 alle 00:56
fonte dall'utente
In altre lingue...                            

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