Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: jak pomocí tail naplnit v shellu proměnnou? [vyřešeno]  (Přečteno 1576 krát)

timmynovak

  • Aktivní člen
  • *
  • Příspěvků: 300
jak pomocí tail naplnit v shellu proměnnou? [vyřešeno]
« kdy: 21 Listopadu 2011, 15:42:32 »
Ahoj, potřeboval bych zpracovávat nové přírůstky ze syslog, které běžně vidím pomocí:
Kód: [Vybrat]
tail -f /var/log/syslog
ale nemohu příjít na to, jak bych třeba ve skriptu a cyklu mohl postupně do proměnné načítat to, co tail vrací a s tím pak něco dělat. Je to asi kravinka, ale ne a ne na to přijít:( Díky za rady či ukázkové příklady.
« Poslední změna: 22 Listopadu 2011, 21:40:24 od Petr Merlin Vaněček »

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #1 kdy: 21 Listopadu 2011, 15:51:15 »
Kód: [Vybrat]
promenna="$(tail -f /var/log/syslog)"
Tak dlouho se vrzá s Acerem, až se displej utrhne.

Kedrigern

Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #2 kdy: 21 Listopadu 2011, 15:59:35 »
Předchozí řešení je dobré, ale tuším, že funguje jen v modernějších shellech. IMHO klasické je použít:
Kód: [Vybrat]
`command`což vrátí výstup příkazy (spustí si to subshell a zkopíruje výstup), čili můžeš udělat:
Kód: [Vybrat]
x=`command`
Ale pokud to nepíšeš pro nějaký prehistorický systém, tak použij předchozí odpoveď. Tohle postuji tak pro info :).

timmynovak

  • Aktivní člen
  • *
  • Příspěvků: 300
Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #3 kdy: 21 Listopadu 2011, 16:19:49 »
děkuji

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #4 kdy: 21 Listopadu 2011, 20:41:42 »
děkuji
Jak jsi to tedy vyřešil? Mně žádné z uvedených řešení nefunguje: `tail -f` se musí zabít, aby se ukončil.

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #5 kdy: 21 Listopadu 2011, 21:18:22 »
děkuji
Jak jsi to tedy vyřešil? Mně žádné z uvedených řešení nefunguje: `tail -f` se musí zabít, aby se ukončil.

Kód: [Vybrat]
-f, --follow[={name|descriptor}]
              output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent

cili ten tail proste bude neustale bezet, protoze ceka na prirustek souboru, aby ho mohl vypsat


EDIT: ted koukam, ze to do te promenne nezapisuje. vi nekdo proc?
« Poslední změna: 21 Listopadu 2011, 21:21:16 od Šuohob »
Tak dlouho se vrzá s Acerem, až se displej utrhne.

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #6 kdy: 21 Listopadu 2011, 21:31:53 »
EDIT: ted koukam, ze to do te promenne nezapisuje. vi nekdo proc?

Zapisuje, ale teprve až sejmeš ten proces, můžeš proměnnou přečíst. Resp. proměnná se vytvoří, až bude kompletní obsah.
V zásadě jde o to, že spustíš subshell, který něco tvoří a teprve až skončí, výsledek se přesune do proměnné.
« Poslední změna: 21 Listopadu 2011, 21:38:38 od GdH »

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #7 kdy: 21 Listopadu 2011, 21:36:35 »
Takže bych v bashi musel periodicky načítat celý soubor (nebo zabíjet `tail`, jenže pak by `tail -f` ztrácelo veškerý smysl) a dále sledovat nějaký marker kde jsem v souboru skončil, abych zjistil, co nového se mi načetlo.

Existuje nějaké čistší řešení?

timmynovak

  • Aktivní člen
  • *
  • Příspěvků: 300
Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #8 kdy: 21 Listopadu 2011, 23:10:39 »
aaaha, tak mi to fakt nefunguje:(

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #9 kdy: 21 Listopadu 2011, 23:25:31 »
Možná by ti stačilo něco jako
Kód: [Vybrat]
tail -f /var/log/syslog | while read line; do echo $line; done
nový řádek je vždy v proměnné line.

timmynovak

  • Aktivní člen
  • *
  • Příspěvků: 300
Re:jak pomocí tail naplnit v shellu proměnnou?
« Odpověď #10 kdy: 22 Listopadu 2011, 20:03:37 »
skvělé, děkuji, funguje to přesně tak, jak jsem potřeboval, děkuji!

 

Provoz zaštiťuje spolek OpenAlt.