Merci pour tous les éléments de réponses, effectivement, on peut faire :
while ! iw dev wlo1 scan 2> /dev/null
do
sleep 1
echo "Scan en cours..."
done
La raison de ce code est qu’il fait suite à ces commandes :
ip link set wlo1 down
iw dev wlo1 set type managed
ip link set wlo1 up
Et donc si toute suite après la commande ip link set wlo1 up, je lance la commande iw dev wlo1 scan, j’aurais cette erreur :
command failed: Device or resource busy (-16)
, parce que l’interface wlo1 met du temps pour être en état « up ».
J’aurais pu faire un simple sleep comme ceci :
sleep 3
iw dev wlo1 scan
, mais si un sleep de 3 secondes n’est pas suffisant pour que wlo1 soit à « up », il faudrait mettre un sleep à 4 secondes, ou à 5 secondes.
Mais pour ne pas à définir en dur la durée du sleep, je préfère utiliser une boucle while pour vérifier si wlo1 est prêt pour le scan, donc « tant » que wlo1 n’est « pas encore » prêt pour le scan, càd si la commande iw dev wlo1 scan 2> /dev/null retourne false, alors on revérifie à nouveau cette condition 1 seconde plus tard , sinon si ça ne retourne pas false, c’est que wlo1 est prêt pour le scan, et donc va scanner et on sort donc de la boucle while.
Sinon, si on veut en plus faire un egrep pour filtrer la sortie en cas de succès :
while true
do
#On exécute la commande :
if ! iw dev wlo1 scan 2> /dev/null | egrep "BSS ([a-zA-Z0-9]{2}:)|SSID|freq|rates|signal|primary channel|WPA|RSN"
#Et donc si elle retourne une erreur, on passe à la prochaine itération de la boucle while :
then
sleep 1
echo "Scan en cours..."
else
#Alors la commande sera exécuté sans erreur, et donc on sort de la boucle while :
break
fi
done