Während keine direkte Antwort auf Ihre Frage, müssen Sie so etwas wie
read -t 3 variable < <(tail -f logfile.log | grep "something")
, um für den neu eingestellten Wert von variable
sichtbar zu sein, nachdem die Pipeline abgeschlossen laufen. Überprüfen Sie, ob das Zeitlimit wie erwartet erreicht wird.
Da Sie einfach read
als eine Möglichkeit des Austritts aus der Pipeline nach einer festgelegten Menge an Zeit verwenden, müssen Sie sich nicht über den Umfang der variable
kümmern. Jedoch kann grep
eine Übereinstimmung finden, ohne es innerhalb Ihrer Zeitüberschreitung aufgrund seiner eigenen internen Pufferung zu drucken. Sie können, dass deaktivieren (mit GNU grep
zumindest), mit der --line-buffered
Option:
tail -f logfile.log | grep --line-buffered "something" | read -t 3
Eine weitere Option, falls vorhanden, ist der timeout
Befehl als Ersatz für die read
:
timeout 3 tail -f logfile.log | grep -q --line-buffered "something"
Hier Wir töten tail
nach 3 Sekunden und verwenden den Exit-Status grep
in der üblichen Weise.
Nur für den Fall, können Sie 'alias' aufrufen und überprüfen, dass' read' nicht Alias auf etwas anderes auf Ihrem System ist? –
Fertig - alles klar. – Chris
Sie wissen, dass 'Variable' nur in der Subshell gesetzt wird, in der der' read' Befehl ausgeführt wird, oder? Ihre Version von 'bash' hat nicht die Option' lastpipe', um den letzten Befehl einer Pipeline in der aktuellen Shell auszuführen. – chepner