BArtus
#bash #linux #devops #programowanie

Mam pytanko do wykopowych #programista15k, mam patent jak modyfikować wartości zmiennych w działających skryptach basha:

sh
gdb -batch -p $(pgrep -f $script_name) -ex "call (char*)get_string_value(\"$var_name\")" -ex "call (void*)bind_variable(\"$var_name\",\"$new_value\",0)"

Czy jest podobna funkcja która pozwala zmodyfikować listing funkcji ?
  • Najlepsze
  • Wszystkie komentarze
shabangbinbash
shabangbinbash
@BArtus: w działającym procesie podmienić na żywca? Fajny problem, przyznam że nie wiem, a czemu w ogóle jest taka potrzeba? Nie wiem czy nie możnaby skryptu przepisać żeby co jakiś czas lądował zmienne z pliku za pomocą source, ale to taki strzał w ciemno.
BArtus
BArtus Autor
1
@shabangbinbash: a odnośnie pytania dlaczego, zacytuję klasyka:
BArtus
BArtus Autor
0
@shabangbinbash: Dzięki za hint, działa - ale jest to suboptymalne rozwiązanie :) pogrzebie jeszcze po kodzie bash.

sh
gdb -batch -p $(pgrep -f $script_name) -ex "call (void*)source_file(\"$function_file\",0)"
BArtus
BArtus Autor
0
@shabangbinbash: callchain wyglada tak:
source_file(filenam,flag) :> evalfile(filename,flag) :> parse_and_execute(string,filename,flag)
Gdzie _evalfile czyta skrypt, sprawdza jego wielkość i czy nie zawiera danych binarnych, potem pakuje go do sctinga i przekazuje do parse_and_execute więc powinno się dać podmienić funkcję bez pliku tymczasowege ( ͡º ͜ʖ͡º)
BArtus
BArtus Autor
0
@shabangbinbash: parse_and_execute też dział, nawet wyświetla błędy składni (⌐ ͡■ ͜ʖ ͡■)

sh
(gdb) call (int)parse_and_execute("function _age { echo test; ((i++)) }","/tmp/abc",0
)
/tmp/test: /tmp/abc: line