Ich habe ein Programm, das seine Ausgabe in eine * .out-Datei protokolliert, wenn es ausgeführt wird. Ich habe ein Bash-Skript eingerichtet, um mehrere verschiedene Zeiten laufen zu lassen, so dass jeder Lauf in eine andere * .out-Datei schreibt. Ich fand, dass ich die letzte * .out-Datei wie folgt tail
könnte:Die letzte Datei beenden
watch tail $(ls -tr *.out | tail -n1)
Das Problem scheint zu sein, dass die Referenzierung $()
wird nur einmal ausgeführt. Wenn der erste Lauf abgeschlossen ist, wird die watch
tail
die gleiche * .out-Datei fortgesetzt, obwohl es jetzt eine neuere * .out-Datei gibt.
Wie kann ich dies ändern, um nach einem Lauf zur nächsten * .out-Datei zu gelangen?
Ich habe versucht, ein paar Schachteln von Anführungszeichen und Klammern, aber ich verstehe nicht wirklich die Details der Referenzierung. Die Angelegenheit wird durch die Tatsache kompliziert, dass watch
seinen Befehl an sh
übergibt, obwohl ich bash verwende.
Bonuspunkte: es wäre großartig, wenn dies geändert werden könnte zu tail -f
statt nur watch
alle n
Sekunden zu wiederholen.
hm..ich verstehe den Anwendungsfall wirklich nicht. Möchten Sie ein paar Dateien in Echtzeit lesen? Wenn ja, ist es einfacher, 'tail -f * .out' zu verwenden. – pivanchy
Ich stimme generell mit @pivanchy überein, obwohl es erwähnenswert ist, dass POSIX' tail' nicht garantiert, mehrere Dateien gleichzeitig zu verarbeiten. – kojiro
@pivanchy das ist die Lösung. Ich wusste nicht, dass es so einfach ist. –