Shell - przepisanie wyników pracy z terminala do pliku


(Endy1234) #1

Witam.

Niedawno zacząłem pisać skrypty w bashu. Teraz pojawił się problem, którego nie mogę rozwiązać.

Szukałem rozwiązania wszędzie. Otóż mam program, który pracuje powiedzmy 30 sekund w terminalu, po czym otrzymuje wyniki jego pracy w jednej linii na końcu. Chciałbym zapisać tylko tą linie do pliku. Jest tylko jeden sposób, który zdążyłem poznać, a mianowicie zapisanie całej pracy do pliku txt, a później odczytanie, a następnie zapisanie szukanej przezemnie linii do kolejnego pliku przez Seda. Jest to wykonalne, ale sprawia to, że nie widzę pracy programu co też mi jest potrzebne. Teraz nasuwa się moje pytanie: Jak zapisać wynik z terminala do danego pliku, aby również widzieć pracę programu, a jednocześnie zapisać do txt tylko tej jednej linii?

Jest to mój pierwszy post, proszę o wyrozumiałość. Byłbym bardzo wdzięczny, z góry dziękuje.


(P) #2

Możesz przekierować wyjście programu do terminala i pliku za pomocą komendy tee. Potem możesz za pomocą tail uciąć plik by pozostawić jedynie ostatnią linię.

Coś takiego:

program 2>&1 | tee out.txt

echo $(tail -1 out.txt) > out.txt

2>&1

to oznacza, że przekierowujesz do tee zarówno stdout i stderr, więc w pliku będzie dokładnie to co w terminalu (jeżeli aplikacja wyrzucałaby błędy na stderr a nie stdout – zresztą tak powinna – to bez tego w pliku nie miałbyś zwracanych przez nią błędów).


(Endy1234) #3

Wszystko działa jak należy, wielki dzięki :smiley:


#4

endy1234 , proszę zapoznaj się z tą stroną oraz tym tematem, a następnie,używając przycisku image.php?album_id=20&image_id=4038