Ist watch
nur die sichtbare Ausgabe eines Befehls überwachen? Angenommen, ich befinde mich in einem Verzeichnis mit folgendem Inhalt:
$ ls
a b c d e f g h i j k l m n
Beim Ausführen watch -g ls -1
erwarte ich, dass es beendet wird, wenn eine Datei hinzugefügt oder entfernt wird. Was tatsächlich passiert, ist, dass es nur dann beendet wird, wenn die betreffende Datei in der Terminalausgabe von watch
:
$ watch -g ls -1
Every 2.0s: ls -1 Wed Nov 13 16:35:03 2013
a
b
c
d
e
f
Das Löschen der Datei m
, die aufgrund der Größe meines Terminals nicht sichtbar ist, führt zu nichts. Das Löschen einer sichtbaren Datei d
führt watch
beispielsweise zum erwarteten Beenden.
Die -g
Flagge ist so auf meiner man
Seite erklärt:
-g, --chgexit
Exit when the output of command changes.
Was ist los? Ist das normal? Wie kann ich watch
Befehle mit langer Ausgabe verwenden? Ich benutze watch from procps-ng 3.3.4
das, was von den Debian-Repos installiert wurde.
-g
Option zuwatch
tun? Ich finde es nicht in meiner Version vonwatch
Antworten:
Ich fand diesen Thread mit dem Titel: Bug # 225549: watch monitor stderr . Dieser Thread stammt aus dem Jahr 2008, aber es sieht so aus, als ob ältere Versionen nichts anderes als STDOUT unterstützen.
Wir sind also auf STDOUT beschränkt. Was das Sichtbare anbelangt, gibt es in der Sprache viel,
info watch
undman watch
das lässt mich denken, dass Ihre Beobachtung / Annahme richtig ist.Auszug
Auch dieses Bit unter BUGS:
Wenn ich raten müsste, würde ich denken, dass sie die sichtbaren Bits in einem Puffer zwischen den Läufen speichern und dann nur diese Zeichen analysieren.
EDIT # 1
Ich habe dies weiter mit debuggt
strace
und Sie können sehenwatch
, wie die Ausgabe desls
Befehls gelesen wird, damit die Änderung intern verworfen wird.bevor ich die
m
datei löschenachdem die
m
Datei gelöscht wurdequelle
watch -g foo; echo "Something changed!"
. Es scheint ein seltsam lähmender Fehler in einem so etablierten Programm zu sein.-g
Schalter nicht , aber ich habe es auf Ubuntu versucht und es verhält sich genauso.Ich bin mir ziemlich sicher, dass Sie Inotify-Tools suchen .
Meine Manpage für watch von procps-ng sagt
quelle
watch
, dass sie sich als OP verhalten und mit der Änderung aussteigen.watch
sich so verhält. Er weiß über Inotify Bescheid.