Bash. Vložit volání funkce v zásobníku volání

hlasů
-1

Snažím se vytvořit „nějakou funkci zaháknutí systému“ pro bash skriptu. Hlavním bash script již existuje, a jde o to, aby bylo možné vytvořit nějaký systém zásuvných modulů s cílem nechat uživatelům vytvářet malé bash skripty, které obsahují své vlastní věci v rámci těchto tří způsobů:

  • Prehooking -> uživatelé budou moci vytvořit funkci, která bude spuštěna před funkci hlavního skriptu, který si zvolí
  • Přepsání -> uživatelé budou moci zcela potlačit funkci hlavního scénáře, aby jej přepsat s vlastní obsah
  • Posthooking -> uživatelé budou moci vytvořit funkci, která bude provedena okamžitě po funkci hlavního skriptu, který si zvolí

Již jsem pracoval systém pluginů pro prehooking a potlačení funkce. Hlavní Skript analyzuje malé pluginy skripty a sledovat některá pravidla a validace (nomenklatura atd ...) v případě, že plugin je dobře udělal to funguje.

Můj problém se snaží vytvořit funkci posthooking a já hledal nápady. Důvodem je, že pro prehooking, jsem přepsat celý funkce dělá sed nad jejím obsahem a hledáním první {vzhled, které mají být nahrazeny { call_to_prehook, a funguje to jako kouzlo. Ale nemůžu udělat totéž pro posthooking. Nemohu nahradit poslední vzhled }nastavit něco podobného call_to_posthook }, protože v případě, že funkce má návratnost to nebude fungovat. Nebude nikdy dosaženo, že posthook.

Teď bojuje o to, zda by bylo možné, aby „injekci“ volání funkce v zásobníku volání, nebo něco takového. Není si jistý, jestli v bash „stromem hovorů“ lze zkontrolovat ještě před dosáhnout jej.

Trochu PoC pro lepší pochopení:

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

Myslím, že k provedení posthooking funkce jednoho by to mohlo být provedeno provedením prehooking funkce dva, ale to není platný nápad pro mě kvůli složitosti reálného scénáře a samozřejmě, protože tímto způsobem, mohla poslední funkce není být posthooked.

Nějaký nápad? Dík.

Položena 10/10/2019 v 00:56
zdroj uživatelem
V jiných jazycích...                            

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