初歩的なLinuxコマンドについて質問(whileとsleepの組み合わせ)
質問内容
下記のコマンドは無限スリープしているように思うのですが、構文的になぜ無限にスリープするのか教えていただけませんか?
パッと調べて出てくる構文と少し違いがあり、分かりません。。。
よろしくお願いします。
# while sleep 1; do :; done
0
下記のコマンドは無限スリープしているように思うのですが、構文的になぜ無限にスリープするのか教えていただけませんか?
パッと調べて出てくる構文と少し違いがあり、分かりません。。。
よろしくお願いします。
# while sleep 1; do :; done
while 文の基本的な構文は以下の通りです。 while 文に入るとまず条件コマンドが実行され、終了ステータスが0ならコマンド1、コマンド2、……が順に実行されます。これを条件コマンドが0以外で終了するまで繰り返します。
while 条件コマンド; do
コマンド1
コマンド2
...
done
改行とセミコロンは置き換えることもできます。ご質問の while 文をわかりやすく変形すると以下になります。
while sleep 1; do
:
done
ここで :
はシェルの組み込みコマンドで、実行しても何も起きません。構文的に何かコマンドを書かなければいけないが特に実行したいコマンドがないときに使えます。また sleep 1
は常に終了ステータス0を返します。
よってご質問の while 文は1秒スリープし、何もしないコマンドを実行し、また1秒スリープし……を繰り返します。
@okatti-et14
Questioner