インターネットにアクセスできるようになったときにこのbashスクリプトに通知するように書いたが、何か起きていることを理解していない。ここではスクリプトです:インターネットにアクセス可能なときに通知するためのBashスクリプト
while ! ping 8.8.8.8 -c 1 2&> /dev/null ; do true; done;
- が
-c 1
オプションは、私が唯一のパケットを送信したいping
を伝えます。 - 出力が見たくないので、
2&> /dev/null
があります。 true
があります。bash
はdo;
の構文を受け入れなかったためです。- の前にパケットが受信されない場合、
ping
がゼロ以外のステータスコードを返すため、終了条件は! ping ...
です。
ping
が成功し、ターミナルエミュレータから通知が自動的に届いたときに、このループが終了するようになっていました。
問題
- このコマンドは、インターネットにアクセス可能になっても終わりません。
ctrl + C
でコマンドを強制終了しようとすると機能しません。私はコマンド全体の代わりにサブコマンドping
を殺していると思います。2&> /dev/null
を削除するだけで、端末に出力を書き出すという小さな問題以外はすべて動作します。
私のコマンドを使用して、何が悪いの質問
- ?
- 端末エミュレータと正確にはどのように反応しますか
ctrl + C
? 2&> /dev/null
を削除すると効果的です
私は既にターンアラウンドがあることに注意してください。それでも、私はもう少し詳しくbash
を理解したいです。
f() { while ! ping 8.8.8.8 -c 1 ; do true; done; }; f 2&> /dev/null
私のバージョンの 'ping'は' ping -c1 8.8.8.8'を想定しています。あなたの問題を探求するためのPluse-uno!がんばろう。 – shellter