Ich möchte ein Programm die neuesten Zeilen aus einer Textdatei mit Schwanz als Stdin senden.Tail-Ausgabe in ein Programm umleiten
Als Erstes stimme ich dem Programm einige Eingaben zu, die jedes Mal gleich sind, und sende dann die Endeingabe von einer Eingabedatei ein, die zuerst durch sed verarbeitet werden soll. Das Folgende ist die Befehlszeile, von der ich erwarte, dass sie funktioniert. Aber wenn das Programm läuft, empfängt es nur die Echoeingabe, nicht die Tail-Eingabe.
(echo "new" && tail -f ~/inputfile 2> /dev/null | sed -n -r 'some regex' && cat) | ./program
, jedoch folgende Arbeiten genau wie erwartet, den Druck alles aus zum Terminal:
echo "new" && tail -f ~/inputfile 2> /dev/null | sed -n -r 'some regex' && cat
Also habe ich versucht, mit einer anderen Art von Ausgang und wieder, während der wiederholte Text geschrieben, den Schwanz Text nicht überall angezeigt:
(echo "new" && tail -f ~/inputfile 2> /dev/null | sed -n -r 'some regex') | tee out.txt
das machte mir denken, dass es ein Problem mit Pufferung ist, aber ich versuchte, das unbuffer
Programm und alle anderen Ratschläge hier (012.351.) ohne Ergebnisse. Wohin geht die Tail-Ausgabe und wie kann ich sie wie erwartet in mein Programm bringen?
Sind Sie sicher, dass sed etwas druckt? '-n' deaktiviert das Drucken des Musterbereichs, so dass die einzige Ausgabe von diesem Befehl das ist, was Sie explizit mit' p' drucken. (Ich denke ... ich mache nicht viel mit sed.) Versuchen Sie 'cat ~/inputfile | sed -n -r 'regex' und sieh nach, ob etwas gedruckt wird. Wenn nicht, dann weißt du warum! –
In deinen ersten beiden Beispielen glaube ich nicht, dass 'cat' jemals ausgeführt wird. In allen Beispielen führt die Shell 'echo' aus (was erfolgreich ist), also geht es weiter zum zweiten Befehl, dem Pipeline-Tail | sed'. Aber "tail -f" endet nie - es wartet nur auf weitere Daten, die am Ende von ~ ~/inputfile erscheinen.'sed' kann die Ausgabe puffern (oder es gibt überhaupt keine Ausgabe), aber bis' tail' beendet wird, wird 'sed' nicht beendet und entweder beendet. Und bis 'Schwanz | sed 'exits,' cat' wird nicht ausgeführt. (Ich glaube nicht, dass du wirklich 'Katze' brauchst, wirklich.) Hängt ein anderer Prozess an '~/inputfile'? –
@DaveM. yes sed druckt eine einzelne Erfassungsgruppe mit dieser Kombination. Ich kann versichern, dass es funktioniert und etwas druckt. Du hast Recht, dass Cat nicht ausgeführt wird, obwohl das Entfernen nichts ändert - das Pipe funktioniert immer noch nicht. Ja, ein anderer Prozess hängt an ~/Eingabedatei und ich möchte einen Teil dieser Ausgabe an mein Programm senden. – Laurence