Grzmotnąć. Wstawić wywołanie funkcji w call stack

głosy
-1

Próbuję stworzyć „pewien rodzaj funkcji systemu zaczepowego” dla skryptu bash. Głównym skrypt bash już istnieje i chodzi o to, aby być w stanie stworzyć jakiś system wtyczek, aby pozwolić użytkownikom na tworzenie małych skryptów bash zawierające własne rzeczy w tych trzech metod:

  • Prehooking -> użytkownicy będą w stanie stworzyć funkcję, która zostanie wykonana przed funkcji głównego scenariusza, którego wyboru
  • Nadrzędne -> użytkownicy będą w stanie całkowicie zastąpić funkcję głównego skryptu w celu przerobienia jej zawartości niestandardowej
  • Posthooking -> użytkownicy będą w stanie stworzyć funkcję, która zostanie wykonany natychmiast po funkcję głównego scenariusza, którego wyboru

Już działa system wtyczek dla prehooking i nadrzędne funkcje. Głównym Skrypt analizuje trochę skryptów i wtyczek po kilka zasad i walidacji (nomenklatura etc ...), czy wtyczka jest dobrze zrobione to działa.

Mój problem próbuje stworzyć funkcję posthooking i szukam pomysłów. Powodem jest fakt, dla prehooking, ja przepisać całą funkcję robi sed nad jego treścią i poszukiwania pierwszy {występ zostać zastąpiona { call_to_prehooki działa jak czar. Ale nie mogę zrobić to samo dla posthooking. Nie mogę wymienić ostatni wygląd }, aby ustawić coś takiego call_to_posthook }, bo jeśli funkcja ma powrotu nie będzie działać. Że posthook nigdy nie zostanie osiągnięty.

Teraz jestem walczą o tym, czy może to być możliwe, aby „wstrzyknąć” wywołanie funkcji w stosie wywołań czy coś takiego. Nie wiem, czy w bash „drzewem połączeń” można sprawdzić, zanim jeszcze go osiągnąć.

Trochę PoC dla lepszego zrozumienia:

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

Myślę, że aby wykonać posthooking funkcji jednej można to zrobić wykonując prehooking funkcji dwóch, ale to nie jest ważne dla mnie pomysł ze względu na złożoność realnego scenariusza i oczywiście dlatego, że w ten sposób ostatnia funkcja nie może być posthooked.

Dowolny pomysł? Dzięki.

Utwórz 10/10/2019 o 00:56
źródło użytkownik
W innych językach...                            

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