Portál AbcLinuxu, 7. května 2025 07:28
frame=28634 fps= 20 q=0.0 size= 198848kB time=00:23:51.65 bitrate=1137.8kbits/sPotrebuju prave vycist tu hodnotu "fps= xx" a nasledne pak provest akci. Cele to pobezi ve
while
smycce Pouzil jsem pro to prikaz test
, ale nejak mi to neprovadi to co by melo a nejsem si jist, kde delam chybu. Byl bych tedy vdecny za radu.
Nyni mam vytvoreno neco takoveho:
#!/bin/bash while : do [[ $(tail -c 4096 /dev/shm/ffmpeg-girova.log | egrep 'fps= 18|fps= 17|fps= 16|fps= 15') = 'fps= 18|fps= 17|fps= 16|fps= 15' ]] && echo "Problem se streamem" || echo "kamera OK" sleep 10 doneI pokud se objevi dany retezec v logu, stejne se mi ale provede jen ta cast
|| echo "kamera OK"
.. (Misto echo
budou jine prikazy, toto jsem zvolil jako testovaci priklad.
Budu rad za jakekoliv postrceni spravnym smerem. Predem diky za odpovedi
#!/bin/bash FPS=$($(tail -c 4096 /dev/shm/ffmpeg-girova.log | sed 's/.*fps= \([0-9]*\).*/\1/') if [ $FPS -lt 18 ]; then echo "Nizke FPS." >> /tmp/fps.log; else echo "Kamera ok." >> /tmp/fps.log; fiDej to do cronu a kontroluj kazdych 5 minut.
grep
nebo neceho jineho krome sed
, a porovnani primo presne casti retezce, tak jak jsem puvodne zamyslel?
Např.
... | egrep -o 'fps= *[0-9]+' | while read v; do v="${v##*=}"; v="$[v]"; ... ; done
pokud vám nevadí, že se zahodí desetinná tečka a všechno za ní.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.