14

時間をカウントするための簡単なストップウォッチ (bash 関数) を作成しましたが、今のところミリ秒で現在の時間を表示しています。

コード:

function stopwatch() {
    date +%H:%M:%S:%N
    while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done;
}

この回答で説明されているように変更しようとしましたが、Unix Epoch 以降でのみ機能します。

dateformatを使用すると+%s.%N、bash の減算は整数のみを使用するため、上記の回答からの減算が機能しなくなりました。

どうすればそれを解決し、次のように時間を出力するターミナルストップウォッチを使用できますか:

0.000000000
0.123123123
0.435345345
(and so on..)

?

4

7 に答える 7

16

1日働くことができる1つの可能な(そしてハッキーな)メカニズム:

$ now=$(date +%s)sec
$ while true; do
     printf "%s\r" $(TZ=UTC date --date now-$now +%H:%M:%S.%N)
     sleep 0.1
  done

おまけ: Enter キーを押すと、いつでもLAPタイムを取得できます。;-)

注: これは簡単な修正です。より良いソリューションが利用可能になるはずです...

watchベースのバリアント (同じロジック):

$ now=$(date +%s)sec; watch -n0.1 -p TZ=UTC date --date now-$now +%H:%M:%S.%N
于 2016-06-23T09:01:56.873 に答える
0

減算にはbc( An arbitrary precision calculator language) を使用する必要があります。

要件を満たすコード例を次に示します。

function stopwatch() {
    date1=`date +%s.%N`
    while true; do
        curr_date=`date +%s.%N`
        subtr=`echo "$curr_date - $date1" | bc`
        echo -ne "$subtr\r";
        sleep 0.03
    done;
}

CPU使用率を下げるために追加sleepが追加されました(私のマシンではそれがないとほぼ15%でしたが、これを使用sleepすると1%に低下しました)。

于 2016-06-23T08:46:51.307 に答える