Ich führe ein Skript aus, das davon abhängt, dass das Netzwerk aktiv ist und eine Netzwerkfreigabe bereitgestellt wird. Das Skript wird bei der Anmeldung ausgeführt (was automatisch nach dem Start erfolgt). Das Problem ist, dass ich zum Zeitpunkt der Ausführung des Skripts normalerweise noch keine IP-Adresse (DHCP) habe. Im Moment schlafe ich das Skript nur für 15 Sekunden, aber ich mag diesen Ansatz überhaupt nicht, da ich dem Benutzer mitteilen möchte, ob etwas nicht stimmt.
Was ich vorhabe, ist eine Schleife, während ich noch keine IP-Adresse habe, und dann fortzufahren. Entscheidend ist, dass es nach einer Weile eine Auszeit geben muss. Was ich mir if [ ifconfig | grep "192.168.100" ];
ausgedacht habe ist, aber was passiert ist, dass grepconsumes das ];
und es nicht mag. Dann wird Bash auch wütend, weil es nicht findet, ];
welcher Grep gegessen hat. Und dann habe ich das Timeout noch nicht einmal implementiert.
Jemand schlug vor, eine Variable beizubehalten und beispielsweise in jeder Iteration eine Sekunde zu schlafen und diese Variable jedes Mal zu erhöhen. Hier ist mein vollständiges (nicht funktionierendes) Skript (ich bin ziemlich neu im Bash-Scripting):
x=0
while [ ifconfig | grep "192.168.100." > /dev/null ]; do
echo "no nework"
if "$x" -gt 200; then
#Time out here
exit 1
x=$((x+1))
sleep .1
fi
done
#continue with rest of script...
Alle Hinweise in die richtige Richtung wäre sehr dankbar!
grep
Ausgabe muss nicht umgeleitet werden /dev/null
. Verwenden Sie -q
stattdessen die Option. Und ich finde es auch nicht gut, wenn ifconfig eine gute Idee ist. Warum nicht ping
stattdessen verwenden?
ping
kann je nach Netzwerk fehlschlagen. Es ist besser, nur die laufende Konfiguration des Systems zu überprüfen.
network-online.target
... wartet