Změna skriptu za běhu

Honza1

Změna skriptu za běhu
« kdy: 24. 02. 2017, 15:16:47 »
Zdravim

Zkousel nekdo nekdy menit bash skript (#!/bin/bash), ktery jiz bezi ? Jde o delsi skript, ktery ma jednotlive radky i jednotlive uzavrene cykly (for K in aaaaa ; do (prikazy) ; done).

Pokud vidim, ze nekde v jiz bezicim skriptu na nejakem radku az za aktualne bezicim prikazem i pripadnym celym cyklem neco nevyhovuje, a skript zmenim, funguje to OK.

Pokud zmenim neco, co je az za aktualne bezicim radkem-prikazem (na nove radce samozrejme), ale uz nekde uprostred aktualne beziciho cyklu, uspesnost zmeny uz je diskutabilni a nezkousel jsem to zatim.

Je predpokladano, ze aktualni prikaz, ktery prave bezi, jeste chvilku pobezi (minuty, hodiny, dny), jinak by zmena beziciho skriptu jiz nemusela prinest nic dobreho (prubeh by skocil na aktualne editovany radek).

Setkali jste se s potrebou editace jiz beziciho skriptu ?
« Poslední změna: 24. 02. 2017, 15:42:16 od Petr Krčmář »


lobo

Re:Zmena skriptu za jizdy
« Odpověď #1 kdy: 24. 02. 2017, 15:33:14 »
skript sa vykonava v pamati, tj. zalezi ci je cely nacitany do pamate alebo len ciastocne.

Kit

Re:Změna skriptu za běhu
« Odpověď #2 kdy: 24. 02. 2017, 20:35:45 »
Skript je do paměti načítán řádek po řádku. Již načtené řádky si však Bash pamatuje a nikdy se ve zdrojáku nevrací.

Samomodifikující programy mají své místo například v Lispu, ale pro Bash to není zrovna doporučený postup. Zpravidla se v něm podobné záležitosti řešit jinak a mnohem elegantněji.

nobody(ten pravej)

Re:Zmena skriptu za jizdy
« Odpověď #3 kdy: 24. 02. 2017, 20:40:23 »
skript sa vykonava v pamati, tj. zalezi ci je cely nacitany do pamate alebo len ciastocne.
je jedno jestli je nebo neni v pameti, fakt je ten ze pri zmene se spracovanej script o tom dozvi a pokracuje na puvodni pozici a tim pri zmene co ji posune zarve ze je prase v scriptu...

pokud se pocita s tim ze se ma script upravovat pri jeho behu, je vhodne si ho rozdelit na nekolik casti tak ze se jednotlive casti volaji jako samostatny script a cyklus ho zavola po zmene znovu celej...

Honza1

Re:Změna skriptu za běhu
« Odpověď #4 kdy: 25. 02. 2017, 18:37:42 »
Zmena jiz beziciho skriptu neni neco, co by melo byt pravidlem, spis mi jde o to, co se stane, kdyz zjistim, ze je v jiz bezicim skriptu chyba (v oblasti, kam proces nedosel ani v radku, ani v nejvetsim cyklu) a ja tu chybu opravim. Jde o skript bezici nekolik dni, ukoncit a znovu spustit je ale asi reseni (a navazat nejak na jiz hotovou cast, pokud to jde).

Podle vseho skript nacita radek po radku, a kdyz radek 152 zkonci, ktery aktualne probiha, jde na radek 153. Na radku  153 ale uz muze byt jiny radek, nez ktery tam byl, protoze jsem editoval v miste okolo 205. radku (konkretni cisla jsou jen pro priklad).

Tedy pokud bych nekde na 205 radku neco menil, jen napr. zmena parametru, nemelo by se pravdepodobne nic stat, ale umazani ci pridani radku muze byt vetsi problem. A jako umazani se pravdepodobne pocita i zakomentovani radku ##. Podle chovani to tak vypada.

Nejlepsi je ale asi skript stopnout a pustit od znova.


nobody(ten pravej)

Re:Změna skriptu za běhu
« Odpověď #5 kdy: 25. 02. 2017, 21:52:14 »
zbytecne to komplikujes, editovani beziciho scriptu je prasarna, pokud to potrebujes, udelej ho modularni a upravuj jeste nevolane "script moduly"...
bez toho muzes leda menit znak za znak aby souhlasil celkovy pocet znaku, protoze se neresej jenom radky...