La [
commande consiste à évaluer les expressions conditionnelles. C'est inutile ici.
Parce umount
que rien ne sort sur sa sortie standard (les erreurs vont à stderr), se `sudo umount mount`
développe à rien.
C'est donc comme:
while [ ]
do
sleep 0.1
done
La [
commande, lorsqu'elle n'est passée aucun argument à côté [
et ]
renvoie false (un état de sortie différent de zéro), vous n'entrerez donc pas dans la boucle.
Même s'il umount
avait généré ses erreurs sur stdout, l'utilisation de la [
commande n'aurait pas eu de sens, car les mots résultant de cette sortie n'auraient jamais constitué une expression conditionnelle valide.
Ici vous voulez:
until sudo umount mount
do
sleep 0.1
done
Autrement dit, vous voulez vérifier l'état de sortie de sudo / umount, pas d'une [
commande.
Si vous vouliez vérifier si la umount
sortie d'une erreur ou d'un avertissement sur son stderr, c'est là que cela [
aurait pu être utile. Le -n "some-string"
est une expression conditionnelle reconnue par la [
commande pour vérifier si "some-string"
est vide ou non, donc quelque chose comme:
while [ -n "$(sudo umount mount 2>&1 > /dev/null)" ]; do
sleep 0.1
done
Mais rechercher la présence de messages d'erreur ou d'avertissement est généralement une mauvaise idée. La umount
commande nous dit si elle réussit ou non avec son code de sortie, c'est beaucoup plus fiable. Il pourrait réussir et afficher un message d'avertissement. Il pourrait échouer et ne pas générer d'erreur (comme lorsqu'il est tué).
Dans ce cas particulier, notez que cela umount
peut échouer car le répertoire n'est pas monté et que vous boucleriez pour toujours dans ce cas, vous pouvez donc essayer une autre approche comme:
while mountpoint -q mount && ! sudo umount mount; do
sleep 0.1
done
Ou si "mount" peut être monté plusieurs fois et que vous souhaitez tous les démonter:
while mountpoint -q mount; do
sudo umount mount || sleep 0.1
done