ネットワークの稼働とネットワーク共有のマウントに依存するスクリプトを実行しています。スクリプトはログイン時に実行されます(起動後に自動的に実行されます)。問題は、スクリプトが実行されるときまでに、通常はまだIPアドレス(DHCP)を持っていないことです。現時点では15秒間スクリプトをスリープ状態にしていますが、何か問題があるかどうかをユーザーに通知できるようにしたいので、この方法はまったく好きではありません。
私の計画は、IPアドレスをまだ持っていないときにループし、持っているときに続行することです。重要なのは、しばらくするとタイムアウトになることです。私が思いついたのはですがif [ ifconfig | grep "192.168.100" ];
、何が起こるかは、grepがを消費し、];
それが気に入らないことです。それからbashも動揺します、なぜならそれは];
どのgrepが食べたかを見つけることができないからです。そして、私はタイムアウトを実装していません。
誰かが変数を保持し、たとえば各反復で1秒間スリープし、この変数を毎回増やすことを提案しました。これが私の完全な(動作しない)スクリプトです(私はbashスクリプトにかなり慣れていません)。
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...
正しい方向のポインタがあれば大歓迎です!
grep
出力をにリダイレクトする必要はありません/dev/null
。-q
代わりにオプションを使用してください。また、ifconfigをgrepするのは良い考えではありません。ping
代わりに使用しないのはなぜですか?
ping
問題のネットワークによっては失敗する可能性があります。システムの実行構成を確認するだけの方が良いでしょう。
network-online.target
...