しばらく寝るにはループが必要です。

しばらく寝るにはループが必要です。

マイコンピュータで1つの簡単なコマンドを繰り返すループを実行する必要があります。

私が必要だとしましょう:

  • この場合、次の簡単な方法で生成された列挙型(file-0、file-1、file-2、...)を増やしてファイルを保存します。time > file-$x
  • 私の時間を1秒の一部として表現したいので(たとえば)1/70秒ごとにこれを行う必要があります。

どうすればbashスクリプトですべてを正確に表現して表現できますか?

分数は不確実な数量を生成し、正確でなければならないため、小数点以下4〜5桁以上が必要です。

ベストアンサー1

Bashで小数を小数に変換するには:

myvar=$(echo "scale=4; 5/10" | bc)

その後、値を繰り返すには

for i in $(seq 1 1000); do sleep $myvar; done

Debian(GNU)の睡眠実装は、10進数の睡眠値を受け入れるようです。

残念ながら..

この種の精度(小数点4〜5桁)を使用するには、Perlスクリプトやコンパイルされたプログラムなどが必要です。ループ内でプログラムを呼び出すことによるオーバーヘッドは、多くのジッタを追加します。スリープ呼び出し自体には数ミリ秒かかります。

1/10,000秒の睡眠を1000回行い、シナリオを考えてみましょう。

time for i in $(seq 1 1000); do sleep 0.0001; done

real    0m2.099s
user    0m3.080s
sys     0m1.464s

予想される結果は1/10秒です。睡眠はあなたが参照したいレベルに近いではありません。

https://stackoverflow.com/questions/896904/how-do-i-sleep-for-a-millisecond-in-perl

PerlのTime::HiRes、1000*1000マイクロ秒使用:

my $i=0;
for($i=0;$i<=1000;$i++) {
        usleep(1000);
}

real    0m1.133s
user    0m0.024s
sys     0m0.012s

しばらく近づいてみましょう。

おすすめ記事