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
[
,[[
ou non. Je souhaite que des pages de manuel typiques, des exemples GNU et / ou TLDP sur les conditions bash couvrent un tel détailfonction réutilisable et expirera en 'n' secondes
pas besoin de dormir
la source
[[...]]
estksh
/bash
/zsh
spécifique, qui ont tous la$SECONDS
variable spéciale, vous pouvez donc faire:SECONDS=0; until umount... || ((SECONDS > $1)); do..
mount remount,ro
commande sur un appareil mips anno 2009 avec une clé USB Intenso Micro Line peut prendre 23 voire 30 secondes .