Da página de manual grep
:
EXIT STATUS
Normally the exit status is 0 if a line is selected, 1 if no lines were
selected, and 2 if an error occurred. However, if the -q or --quiet or
--silent is used and a line is selected, the exit status is 0 even if
an error occurred.
Assim, se uma linha estiver presente, o status de saída será 0. Já que bash 0 é verdadeiro (porque o status de saída padrão "bem-sucedido" dos programas é 0) você deve ter algo como:
#!/bin/bash
while grep "sunday" file.txt > /dev/null;
do
sleep 1
echo "working..."
done
Por que exatamente você está canalizando sleep 1
para echo
? Embora funcione, não faz muito sentido. Se quisesse que eles estivessem em linha, você poderia escrever sleep 1; echo "working..."
e se quisesse que o echo
fosse executado antes do atraso, você poderia tê-lo antes da chamada sleep
como echo "working..."; sleep 1
.