web-dev-qa-db-ja.com

ミリ秒単位のBashスリープ

ミリ秒で動作するタイマーが必要です。スクリプトで_sleep 0.1_コマンドを使用しようとしましたが、エラーメッセージが表示されます。

syntax error: invalid arithmetic operator (error token is ".1")

ターミナルで_sleep 0.1_を実行すると、正常に動作します。

私を助けてください!

編集:申し訳ありませんが私は間違いを犯しました:

_function timer
{
while [[ 0 -ne $SECS ]]; do
    echo "$SECS.."
    sleep 0.1
    SECS=$[$SECS-0.1]
done
}
_

行_sleep 0.1_は5番目で、_SECS=$[$SECS-0.1]_は6番目でした。私はちょうど行を文字化けしました。問題は、bashが浮動小数点数では機能しないため、6行目にありました。以下のように機能を変更しました。

_MS=1000
function timer
{
while [[ 0 -ne $MS ]]; do
    echo "$SECS.."
    sleep 0.1
    MS=$[$MS-100]
done
}
_
14
Noqrax

/bin/shではなく、Bashでスクリプトを実行していることを確認してください。例えば:

#!/usr/bin/env bash
sleep 0.1

つまり、シェルを明示的に指定してみてください。次に、./foo.shまたはbash foo.shのいずれかで実行します。

sleepがエイリアスまたは関数の場合、sleep\sleepに置き換えてみてください。

38
kenorb

いくつかのオプション:

read -p "Pause Time .5 seconds" -t 0.5

または

read -p "Continuing in 0.5 Seconds...." -t 0.5
echo "Continuing ...."
3
Jose H. Rosa

Bashは10進数値について不平を言っていましたが、

読み取り:0.5:無効なタイムアウト指定

this でうまくいく解決策を見つけました。

sleep_fraction() {
  /usr/bin/Perl -e "select(undef, undef, undef, $1)"
}

sleep_fraction 0.01428
0
Evhz