2016-01-13 7 views
6

Co staram się zrobić to:W jaki sposób potokować wyjście procesu do komendy rejestratora i komendy head?

  • Rozpocznij proces, który wyświetla tekst ciągły

  • pipe, że wyjście do dwóch komend:

    1. skrypt rejestrator
    2. ' polecenie head, więc mogę zapisać pierwsze wiersze w wyjściowym procesie wyjściowym.

co starałem tak daleko (unsuccessfuly) wynosi:

./myProgram | tee > (myLogger log.txt) | head > firstLines.txt

Problemem jest to, że myProgram wyjścia jak tylko head jest zakończona.

Nawet jeśli użyję polecenia -i w tee, nie będę mógł uruchomić programu myProgram.

Ponieważ rejestrator może dołączyć przychodzący tekst do istniejącego pliku, wykonanie head log.txt > firstLines.txt nie będzie działać w tym przypadku.

+1

Przełącznik porządek wokół. Użyj '> (...)' dla 'head' i normalnej rury dla twojego loggera? –

+0

To także było moje pierwsze przypuszczenie, ale spróbowałem i problem nadal istnieje. –

+0

Niezbyt eleganckie rozwiązanie: Wyjście do pliku tymczasowego, a następnie dołączenie tego pliku tymczasowego do pliku log.txt, a następnie prześlij plik tymczasowy, a następnie usuń plik tymczasowy. – Bartez

Odpowiedz

1

Można użyć awk jako alternatywa do zrobienia zarówno:

./myProgram | 
    awk 'NR<=10{print > "firstLines.txt"} NR>10{close("firstLines.txt")} 1' > log.txt 
+1

Pokonaj cię przez 8 sekund - co Cię zatrzymało? ;-) –

+1

lol :) tak wiem, otworzył ten wątek późno. – anubhava

+1

Działa bezbłędnie! Dziękuję Ci! – Stefano

1

Jak to może:

yes | awk 'FNR<4 {print >>"file"; close("file")} 1' | more 

gdzie yes jest program, file jest gdzie wysłać wyjście do head i more jest Twój rejestrator.