Hallo zusammen,
ich versuche gerade eine Verkettung mehrerer Befehle und das Auftreten eine Fehlers mitzubekommen.
Dazu folgende Informationen:
Im Ordner /tmp werden log-Einträge in die Datei messages.xyz geschrieben. (xyz = fortlaufende Nr) Um immer die neueste Datei zu erwischen verwende ich
ls -S /tmp | grep messages | tail -1
Das klappt soweit gut. Beispielergebnis: messages.400
Wenn ich jetzt mit tail -f diese Datei beobachte und nur Einträge mit dem Suchmuster .srv angezeigt haben will mache ich das so:
tail -f messages.400 | grep .srv
Das klappt auch, aber ich kann diese beiden Befehlsketten nicht ineinander verschachteln.
Mein Versuch war, mittels runder Klammern einzusetzen
tail -f (ls -S /tmp | grep messages | tail -1) | grep for.srv
Habe dazu noch nichts funktionierendes über die Suche gefunden, aber vermutlich ist es nur eine Kleinigkeit.
Hat jemand einen Tipp für mich?
Gruß kochi
Verketten mehrerer Befehle in einem Aufruf
Re: Verketten mehrerer Befehle in einem Aufruf
Code: Alles auswählen
find /tmp -name messages.\* -exec grep -H SuchString {} \;
Re: Verketten mehrerer Befehle in einem Aufruf
Statt (ls ...) suchst du $(ls ...). Ob es hilft weiß ich nicht.
Re: Verketten mehrerer Befehle in einem Aufruf
Runde Klammern eröffnen eine Subshell - was du willst ist die Ausgabe dieser Befehlskette als neues Argument $() und gequotet, falls Leerzeichen vorhanden sind:
Code: Alles auswählen
tail -f "$(ls -S /tmp/*messages* | tail -1)" | grep for.srv
Re: Verketten mehrerer Befehle in einem Aufruf
Da mit der Ausgabe der Befehlskette als neues Argument $() hatte ich versucht. Ohne Anführungszeichen und mit einfachen Hochkommata. Da kam immer die Fehlermeldung
tail: $(ls | grep messages | tail -1) kann nicht zum Lesen geöffnet werden: Datei oder Verzeichnis nicht gefunden
Mit normalen Anführungszeichen hat es jetzt auch bei mir geklappt Manchmal sind es die Kleinigkeiten, die einem das Brett vor den Kopf nageln
tail -f "$(ls | grep messages | tail -1)" | grep .srv
Besten Dank!!!
tail: $(ls | grep messages | tail -1) kann nicht zum Lesen geöffnet werden: Datei oder Verzeichnis nicht gefunden
Mit normalen Anführungszeichen hat es jetzt auch bei mir geklappt Manchmal sind es die Kleinigkeiten, die einem das Brett vor den Kopf nageln
tail -f "$(ls | grep messages | tail -1)" | grep .srv
Besten Dank!!!
Re: Verketten mehrerer Befehle in einem Aufruf
Ich bin ein großer Fan von multitail, weil es Suchergebnisse hübsch hervorheben kann und auch mehrere Dateien im Blick haben kann:
Ausserdem fällt mir auf, dass du mit -S nach der Größe sortierst, aber du möchtest doch die zuletzt veränderte message Datei finden. Daher ist ls -ltr vllt. besser geeignet.
Code: Alles auswählen
multitail -e ".srv" $(…)