マイコンピュータで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
しばらく近づいてみましょう。