Ich habe eine schwere Zeit zu verstehen, eine Art von Anomalie mit Grep Rückgabewert.grep verhält sich merkwürdig in Kombination mit inotifywait
Wie in der grep man-Seite erwähnt, ist der Rückgabewert im Falle einer Übereinstimmung Null und im Falle von Nicht-Übereinstimmung/Fehler/etc nicht Null.
In diesem Code: (bash)
inotifywait -m ./logdir -e create -e moved_to |
while read path action file; do
if grep -a -q "String to match" "$path/$file"; then
# do something
fi
done
Es gibt nicht-Null, wenn abgestimmt.
In diesem Code: (bash)
search_file()
{
if grep -a -q "String to match" "$1"; then
# do something
fi
}
inotifywait -m ./logdir -e create -e moved_to |
while read path action file; do
search_file "$path/$file"
done
Es gibt Null zurück, wenn abgestimmt.
Kann mir jemand erklären, was vor sich geht?
EDIT: Lassen Sie mich noch einmal klar zu sagen: wenn ich den ersten Code auf einer Datei ausgeführt, die die Zeichenfolge enthält, die if-Anweisung ausgeführt wird. Wenn ich den zweiten Code für dieselbe Datei ausfühle, schlägt die if-Anweisung fehl und wird nicht ausgeführt.
_ "es gibt nicht Null zurück, wenn es übereinstimmt" _ Nein, tut es nicht. Etwas anderes passiert. Eine Möglichkeit besteht darin, dass, während Sie auf das Ereignis 'create' warten, aber nicht' close_write', die Datei geschrieben wird, wenn der 'grep'-Test ausgeführt wird. – John1024
Woher weißt du, was es zurückgibt? Willst du damit sagen, dass im letzteren Fall nur der Körper der "if" -Anweisung ausgeführt wird? –
@ John1024 - nichts geht weiter. keine Fehler (ich überprüfte auch ohne -q) – Nlandau