3

カウントダウン時間スクリプトの Google リファレンスを使用して、別の出力を試しています。つまり、残り秒数を表示します: 20. カウントダウンが 10 に達するたびに.. 90、80、70、60、50、40、30、20、10 としてカウントダウンします。clear in while ループを使用した例はたくさんありますが、カウントダウン時間を表示するときにスクリプトの他の出力をクリアしたくありません。

どこで間違いを犯しているのかを知りたいです。

function countdown () 
    { 
        if (($# != 1)) || [[ $1 = *[![:digit:]]* ]]; then
            echo "Usage: countdown seconds";
            return;
        fi;
        local t=$1 remaining=$1;
        SECONDS=0;
        while sleep .2; do
            printf '\rseconds remaining to proceed: '"$remaining";
            if (( (remaining=t-SECONDS) <=0 )); then
                printf '\rseconds remaining to proceed' 0;
                break;
            fi;
        done
    }
4

1 に答える 1

7

問題は、実際には 9、8、7、6 などをカウントダウンしていることですが、10 から末尾の 0 を消去したことがないため、画面に残ります。簡単な修正:

printf '\rseconds remaining to proceed: '"$remaining"' ';

画面から 0 を打つためにスペースを追加すると、すべて問題ありません。

于 2012-04-23T06:15:09.340 に答える