bashの"&"と"&&"

ちょっと前、職場の人に、「(以下の)このエントリが役立った、ありがとう!」とお礼をいただきました。(わざわざ、ありがとうございました。恐縮です。)


で、今更ですが、気付けばそこそこの数のブクマがついていたので、コメントを見させていただくと「正確には30秒毎ではなく、コマンド実行時間+30秒になる。」といった記載がいくつかありました。


あれ?そうなん?なんか自信なくなってきた。
ちなみに↑の(cronの)書き方は以下のような感じ。

* * * * * command & sleep 30; command


実行時間も含める(実行後の終了ステータスを見て、次コマンドを実行する)のは"&&"だと思ってたのですが、何か間違っているのかしら。
1つ目の処理(コマンド実行)は"&"でバックグラウンドに移って、すぐにsleepの実行に入ると思っているのですが・・・。まさに一瞬のその時間のことだとすると誤差の範囲かな、と思っているのであまり気にしていませんでした。

# 間違っているのなら、元記事を直したいので、有識者の皆様よろしくお願いしますm(_"_)m


一応、実験。

$ time ( sleep 2 & sleep 2 )

real    0m2.003s
user    0m0.000s
sys     0m0.000s

1つ目のコマンドをバックグラウンドで実行しつつ、2つ目のコマンドも実行。並列なので約2秒。

$ time ( sleep 2 && sleep 2 )

real    0m4.005s
user    0m0.000s
sys     0m0.000s

1つ目のコマンドが正常に終了(終了コード0)してから、2つ目のコマンドを実行。合計になるので約4秒。