Portál AbcLinuxu, 7. května 2025 05:39

Dotaz: Pomoc s BASH scriptem

15.8.2014 18:28 petrfm
Pomoc s BASH scriptem
Přečteno: 526×
Odpovědět | Admin

Ahoj, dostal jsem porazen script, ktery by mel cist ze seriaku a kdyz prijde definovany retezec, provest prikaz - v tomto pripade shodit server. Jenomze to nejak nechodi. Ten program vstoupi do cyklu jen jednou a vubec mi nevypisuje co prislo ze seriaku.

Jak je to mozne? kde je chyba? Diky moc.

ups="/dev/ttyS0"

stty -F "$ups" cs8 cread clocal -cstopb -echo -ignpar

while sleep 1; do
  while read line; do
    if echo "$line" | grep -qE "^AHOJ"; then
      halt
    fi
    echo "$line"
  done < "$ups"
done
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 15.8.2014 18:40 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
Odpovědět | | Sbalit | Link | Blokovat | Admin
A opravdu ti z toho sériáku něco leze? Máš správnou rychlost?

bash -x
15.8.2014 18:50 petrfm
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem

No zrovna ty ses tvurce toho scriptu :-) zadal jsem bash -x a malem se mi zavaril terminal :-))) hele, kdyz zadam cat < /dev/ttyS0 a poslu si neco na seriak, tak mi to normalne vypisuje. Cili tohle chodi.

Rychlost jsem nstavil pomoci stty, ale mohl bych zadat primo do toho scriptu, protoze jedu na 19200.

15.8.2014 18:52 petrfm
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem

fakt tam neni nejaka drobna chybka? Upravil jsem to takhle a po spusteni mi to vypise:


ahoj...
19200
ctu...

a konec... stoji a ceka. je mi divne, proc to vypise 19200? neni tam nejaka chyba?

 

#!/bin/bash

echo "ahoj..."

ups="/dev/ttyS2"

stty -F "$ups" speed 19200 cs8 cread clocal -cstopb -echo -ignpar

while sleep 1; do
echo "ctu..."
 while read line; do
    if echo "$line" | grep -qE "^AHOJ"; then
      echo "prislo to"
    fi
    echo "$line"
  done < "$ups"
done
15.8.2014 19:53 petrfm
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
Odpovědět | | Sbalit | Link | Blokovat | Admin

tak uz to chodi... ja vul nemel v terminalu zapnute CR LF na konci radku, takze jsem to neposilal jako radky, ale jako posloupnost znaku :-)

 

Jenom se jeste zeptam . zatezuje ten script nejak moc procesor? Muze takhle bezet nonstop? a da se treba nejak ovladat? tzn. predat mu nejak parametr, aby neco poslal na to zarizeni? Jde o to, ze on obsadi ten seriak, takze se k nemu ze systemu nedostanu. Pobezi porad a bude cekat na prichod znaku, aby shodil system.

Kdyz ale budu chtit zjistit, zda to zarizeni bezi z baterek nebo ze site, muzu nejak provest dotaz? To uz bude na bash script asi tvrdsi orisek, ze?

15.8.2014 20:03 petrfm
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
a jeste jedna vec, jak se vlastne spusti bash script, kdyz ho dam do rc.local? Kdzy ho spustim normalne, spusti se na konzoli. Cili ma nejaky std in a std out. Ale kdyz se spusti v rc.local automaticky? tak kde pak bezi jeho vystup a vstup, kdyz je to script, ktery bezi stale? A da se na nej takhle nejak pripojit, nebo mu poslat neco na std.in ? To by byla asi moznost, jak dosahnout nejake interakce, ze? A vystup nekam smerovat, nebo udelat LOG soubor (to umim :-)) ).

Diky moc za rady, jsem lama, ucim se za pochodu :-)
16.8.2014 15:20 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
zatezuje ten script nejak moc procesor?

Vobec. Jadro ho vobec nepusti k lizu, dokym nieco nepride zo seriaku.
If you hold a Unix shell up to your ear, you can you hear the C.
15.8.2014 22:37 petrfm
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
Odpovědět | | Sbalit | Link | Blokovat | Admin

MAZEC !!! takze kdyz jeden script shodim na pozadi, tak normalne bezi a pritom muzu posilat dalsim scriptem znaky na dany seriak, cili to resi muj problem interakce. Myslel jsem, ze port bude zablokovany, ale neni, SUPER.

Pavel Stárek avatar 16.8.2014 14:25 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já tedy nevím co za UPS visí konkrétně na tom seriovém portu, ale pro tyto účely existují programy jako apcupsd, nebo NUT u kterých si dovolím tvrdit, že řeší danou problematiku výrazně lépe než jakýsi zbastlený skript v Bashi :-)
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
16.8.2014 15:52 petrfm
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
apcupsd mam na serveru a je super, ale pro tento ucel nevhodny. Tady se mi hodi prave jenom uplne jednoduchy bash script :-)
Jendа avatar 17.8.2014 01:55 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
Lépe možná, ale znamená to přečíst si dokumentaci (pokud existuje) a buď na straně UPS implementovat nějaký existující protokol, nebo do apcupsd implementovat protokol mé UPS (a pak si držet out-of-tree verzi netriviálního apsupsd). To je docela dost práce na takovou trivialitu jako vypínání.
17.8.2014 14:17 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
znamená to přečíst si dokumentaci

man k nut je velmi jednoduchy

buď na straně UPS implementovat nějaký existující protokol, nebo do apcupsd implementovat protokol mé UPS

ups je v nut/apcupsd "implementovana" predsa ovladacmi. a ups nerobi nic ine, len posiela info o svojom stave a kazdy stav sa da osetrit. takze neviem, co si mam predstavit pod "implementacii ups do apcupsd"

To je docela dost práce na takovou trivialitu jako vypínání.

:) ups podporuje aj siet, je to jednoduche spolahlive riesnie. opat niekto vymysla koleso...
Jendа avatar 17.8.2014 14:35 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
man k nut je velmi jednoduchy
Zkusil jsem otevřít ten a upsd.conf (5). Vidím nějaké listen a další direktivy, nikde tam nevidím straightforward „jak to pověsit na sériák“.
ups je v nut/apcupsd "implementovana" predsa ovladacmi
Opravdu má apcupsd ovladač k JendaUPS™ 3000™?
a ups nerobi nic ine, len posiela info o svojom stave a kazdy stav sa da osetrit
Musím si přečíst, v jakém formátu se to info posílá, vybrat si nějaký jednoduchý z těch 1000 existujících formátů a ten implementovat.
takze neviem, co si mam predstavit pod "implementacii ups do apcupsd"
Zařídit, aby tam fungovala UPS, které po sériáku posílá každou vteřinu čtveřici čísel, což je napětí na vstupu, napětí na baterce a napětí na SENSE odporech vůči nějaké referenci ADC.
:) ups podporuje aj siet, je to jednoduche spolahlive riesnie
Moje UPS teda rozhodně sít nepodporuje.
Pavel Stárek avatar 18.8.2014 10:45 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
Zařídit, aby tam fungovala UPS, které po sériáku posílá každou vteřinu čtveřici čísel, což je napětí na vstupu, napětí na baterce a napětí na SENSE odporech vůči nějaké referenci ADC.
Marně přemýšlím, k čemu je to dobré. Co jsem dělal s UPSkama, tak to fungovalo vždy tak, že pokud chtěl počítač nějaké hodnoty z UPS, tak do ní poslal dotaz a naopak, pokud UPS zjistila, že vypadlo 230VAC tak poslala do onoho PC nějaký event. A už vůbec pochybuji, že by si Jenda vyráběl vlastní UPSku :-D A když už, tak si do NUTu napíše drajvr, protože přeci ví, jak ona vnitřně funguje. Opravdu mne fascinují lidé, kteří vymýšlejí kolo :-D
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
Jendа avatar 18.8.2014 11:15 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Pomoc s BASH scriptem
Co jsem dělal s UPSkama, tak to fungovalo vždy tak, že pokud chtěl počítač nějaké hodnoty z UPS, tak do ní poslal dotaz a naopak, pokud UPS zjistila, že vypadlo 230VAC tak poslala do onoho PC nějaký event.
Je to tak nejjednodušší, ale OK. Problém zůstává.
A už vůbec pochybuji, že by si Jenda vyráběl vlastní UPSku :-D
Pravda, já ne (neprovozuju nic kritickýho, výpadek elektřiny doma nepamatuju a stejně mám notebook a baterkou), ale třeba brmdoor má samodomo UPS, aby šlo odemykat i při výpadku (který je v brmlabu častější).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.