Csináltam még anno egy scriptet, ahol menüből tudok választani, hogy az adott ssh-val mit szeretnék csinálni. Ennek része, hogy lehet olyat csinálni, hogy a megadott szervereken (ezt fzf-el oldom meg) lefuttat egy megadott parancsot. És itt szeretnék egy bonyolultabb sed parancsot kiadni, de az adott szerveren mikor tesztelem, akkor teljesen elkutyulja.
A parancs amit ha lokálisan kiadok, akkor működik:
sed 's/if \[ \$last_exit_code -ne 0 \]/if \[ \$last_exit_code -ne 0 \] \&\& \[ \$last_exit_code -ne 130 \]/g' .bashrc
Ez azt csinálja, hogy a if [ $last_exit_code -ne 0 ] -t lecseréli if [ $last_exit_code -ne 0 ] && [ $last_exit_code -ne 130 ] -ra
Gondoltam escape karaktert használok, hogy ne zavarodjon meg, de ez nem jött be, vagy rossz helyre teszem :) Hibakód nélkül lefut ssh remote parancsként futtatva, de több if [-el kezdődő parancsnál is lefut, és szétkutyulná a file-t.
Hozzászólások
Csak egy kérdés merült fel bennem a poszt olvasása közben.
Ezt nem lehetne konfig management tool-ra pl. Ansible, Puppet bízni?
Hasonlóval én is próbálkoztam, sok idő elment vele, sztem. feleslegesen.
Ha jól emlékszem, akkor vagy 'bash -c "parancs"' lett a megoldás vagy az, hogy azt a csodálatos sed parancsot egy sima fájlból kellett felolvastatni az ssh parancs futásánál.
Közben megcsináltam "kézzel". Vágólapra helyeztem a parancsot, beloggoltam az összes gépre (szerencsére ezt is tudja a scriptem egy kattintásra), aztán ctrl+v, majd exit. aztán megint ctrl+v majd exit :D Végülis meg lettem 2 perc alatt, csak azért kíváncsi vagyok, hogy miben akad el.
Ansible és Puppet ezekre a minimal low resources szerverekre túlzás lenne. Meg azt is mire bekonfigolnám. Alapvetőleg csak most futottam bele ilyen gondba 4-5 év alatt. Más megevett rendesen, de ez már kakukk neki.
Amíg ez néhány gép működik. Én is úgy oldottam meg anno.
Azért dobtam be, mert ilyen módosítások automatizációval pár mozdulat. Az első lépés mindig sokáig tart, mire az ember meglépi, de utána nagyon meg tudja könnyíteni az ember életét.🙂
A sed ele tegyel egy echo -t, es rakd le a kimenetet az adott gepre. Latni fogod, hogy mit alkotott, igy latod, hogy hova milyen escape kell. Ha kireszelted, mehet echo nelkul.
A masik megoldas, hogy a kesz parancsbol base64 string, az atmegy, es a masik oldalon kibontas utan eval.
A harmadik mar file muvelettel jar, helyben legeneralod (ha nem statikus a tartalom) majd atviszed script filekent, adsz neki futasi jogot es lefuttatod.