Das Wiederholungsflag des Tail-Befehls funktioniert nicht mit Platzhaltern?

Das Wiederholungsflag des Tail-Befehls funktioniert nicht mit Platzhaltern?

Ich möchte eine Reihe unbekannter Verzeichnisnamen verfolgen, die eine bestimmte nicht vorhandene Datei enthalten, z. B.:

tail -F /tmp/*/app.log

Mit dem Platzhalter funktioniert das jedoch nicht wie vorgesehen: Wenn ich eine Datei mit diesem Pfad erstelle, tailwird die Ausführung erst gestartet, wenn ich den Befehl neu starte. Wenn ich hingegen Folgendes ausführe:

tail -F /tmp/example/app.log

Sobald die Datei erscheint, gibt der Befehl Folgendes aus:tail: '/tmp/example/app.log' has appeared; following new file

Ich habe -f filename --retrystattdessen die Kombination ausprobiert -Fund das Ergebnis ist das gleiche.

Wie kann das Problem gelöst werden und gibt es andere Möglichkeiten, das gleiche Ziel zu erreichen?

Antwort1

/tmp/*/app.logwird von der Shell erweitert (ich nehme an, BASH). Wenn Übereinstimmungen vorhanden sind, wird dies auf diese Übereinstimmungen erweitert und dann als Argumente antail

$ find /tmp/test -type f
/tmp/test/a/app.log                                                                                                                                                                                                                                
/tmp/test/b/app.log                  

$ echo /tmp/test/*/app.log                                                                                                                                                                                        
/tmp/test/a/app.log /tmp/test/b/app.log

Im obigen Fall tailwürde also so konfiguriert, dass speziell app.login aund app.login befolgt wird. Wenn in bzum Zeitpunkt des Starts nicht existierte, würde es nicht befolgt. Wenn neue Verzeichnisse oder Dateien erstellt werden, wird es ihnen ebenfalls nicht folgen.app.logb

Falls keine Übereinstimmungen vorliegen, wird die nicht erweiterte Zeichenfolge als Argument antail

$ echo /tmp/test/*/app2.log                                                                                                                                                                                     
/tmp/test/*/app2.log               

Es wird also versucht, dem wörtlichen Pfadnamen/Dateinamen zu folgen /tmp/test/*/app2.log, der wahrscheinlich nie existieren wird (oder wenn er existiert, wurde er auf sehr merkwürdige Weise erstellt, denn die Verwendung *als Verzeichnisname ist nichts, was ich unter normalen Umständen empfehlen würde).

verwandte Informationen