Para acertar a lógica, apenas pequenas alterações são necessárias. Use:
while ! df | grep '/toBeMounted'
do
sleep 2
done
echo -e '\a'Hey, I think you wanted to know that /toBeMounted is available finally.
Discussão
O código correspondente na pergunta foi:
while df | grep -v '/toBeMounted'
O código de saída de um pipeline é o código de saída do último comando no pipeline. grep -v '/toBeMounted'
retornará verdadeiro (código = 0) se pelo menos uma linha de entrada não corresponder a /toBeMounted
. Assim, isso testa se há outras coisas montadas além de /toBeMounted
. Isto não é nada do que você está procurando.
Para usar df
e grep
para testar se /toBeMounted
está montado, precisamos
df | grep '/toBeMounted'
Isso retorna true se /toBeMounted
estiver montado. O que você realmente precisa é a negação disso: você precisa de uma condição que seja verdadeira se /toBeMounted
não estiver montado. Para fazer isso, só precisamos usar a negação, denotada por !
:
! df | grep '/toBeMounted'
E isso é o que usamos no código acima.
Documentação
De manual do Bash :
The return status of a pipeline is the exit status of the last command, unless the pipefail option is enabled. If pipefail is enabled, the pipeline's return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully. If the reserved word
!
precedes a pipeline, the exit status of that pipeline is the logical negation of the exit status as described above. The shell waits for all commands in the pipeline to terminate before returning a value.