Bash betiği tek satırda 5 dakikalık göstergeyi geri saydı [kapalı]


23

Her dakikayı güncelleyerek ve sonucu aynı satırda gösteren 5 dakikalık bir sayım olmasını istiyorum. Bash komut dosyasıyla bile mümkün mü?


Geri sayım ne yapar? Her şey hakkında biraz daha net olman gerekiyor.
Adrian Frühwirth,

Bu kesinlikle mümkün. Bize niçin (hangi gerçek sistem / ağ yönetimi sorununu çözmeye çalıştığınızı) söylerseniz, yapması gereken mevcut yöntemlerden hangisinin sizin için en iyi sonucu vereceğini söyleyebiliriz. Eğer genel bir "Bunu bir bashkomut dosyasında nasıl yaparım ?" Sorunuzu sorunuzun muhtemelen Unix ve Linux için daha uygun olduğunu - bilmeme izin verin ve sizin için orada
geçirebilirim

Yanıtlar:


42

Bu Bash kabuğundan çalışır:

secs=$((5 * 60))
while [ $secs -gt 0 ]; do
   echo -ne "$secs\033[0K\r"
   sleep 1
   : $((secs--))
done

Özel karakter \ 033 [Tamam orada önceki çıkışından kalan herhangi karakterlerdir ve eğer hattın kalanını temizler çizginin bir ucunu temsil \ r satır başına imleci hareket eden bir satır başı olduğunu. Stackoverflow.com'da bu özellik hakkında hoş bir konu var .

Kendi komutlarını veya süre döngüsünde ne olursa olsun ekleyebilirsiniz. Daha spesifik bir şeye ihtiyacınız olursa, lütfen bana daha fazla ayrıntı verin.


\ 033 [ 0K yerine ascii-table.com/ansi-escape-sequences.php uyarınca K mı demek istiyorsun ?
Jody Lee Bruchon

\rİmleci satırın sonuna getirmeye başladım (ilk karakteri gizlemesini engelledim). İşte güncellenmiş versiyonu: gist.github.com/boillodmanuel/676b3af823fae4177f1d0b41a6f23442 Teşekkürler
user1067920

13

İşte doğru çıkış biçiminde ve destek saatlerinde doğru çıktı biçiminde (HH: MM: SS) geliştirilmiş bir örnek:

#!/bin/bash

m=${1}-1 # add minus 1 

Floor () {
  DIVIDEND=${1}
  DIVISOR=${2}
  RESULT=$(( ( ${DIVIDEND} - ( ${DIVIDEND} % ${DIVISOR}) )/${DIVISOR} ))
  echo ${RESULT}
}

Timecount(){
        s=${1}
        HOUR=$( Floor ${s} 60/60 )
        s=$((${s}-(60*60*${HOUR})))
        MIN=$( Floor ${s} 60 )
        SEC=$((${s}-60*${MIN}))
     while [ $HOUR -ge 0 ]; do
        while [ $MIN -ge 0 ]; do
                while [ $SEC -ge 0 ]; do
                        printf "%02d:%02d:%02d\033[0K\r" $HOUR $MIN $SEC
                        SEC=$((SEC-1))
                        sleep 1
                done
                SEC=59
                MIN=$((MIN-1))
        done
        MIN=59
        HOUR=$((HOUR-1))
     done
}

Timecount $m

Buna benzeyen bir çıktı verir:

02:04:15

Çıktı tam değil HH:MM:SS. Tek basamaklı dakikalar veya saniyeler için görebilirsiniz 00:4:5.
chishaku
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.