Có cách nào để hiển thị đồng hồ đếm ngược hoặc đồng hồ bấm giờ trong thiết bị đầu cuối không?


144

Làm cách nào để hiển thị đồng hồ đếm ngược thời gian thực trên thiết bị đầu cuối Linux? Có một ứng dụng hiện có hoặc, thậm chí tốt hơn, một lớp lót để làm điều này?

Câu trả lời:


184

Tôi không chắc tại sao bạn cần beep, nếu tất cả những gì bạn muốn là một chiếc đồng hồ bấm giờ, bạn có thể làm điều này:

while true; do echo -ne "`date`\r"; done

Điều đó sẽ cho bạn thấy những giây trôi qua trong thời gian thực và bạn có thể dừng nó với Ctrl+ C. Nếu bạn cần độ chính xác cao hơn, bạn có thể sử dụng điều này để cung cấp cho bạn nano giây:

while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done

Cuối cùng, nếu bạn thực sự, thực sự muốn "định dạng đồng hồ bấm giờ", trong đó mọi thứ bắt đầu từ 0 và bắt đầu phát triển, bạn có thể làm một cái gì đó như thế này:

date1=`date +%s`; while true; do 
   echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done

Đối với đồng hồ đếm ngược (không phải là câu hỏi ban đầu của bạn yêu cầu), bạn có thể làm điều này (thay đổi giây tương ứng):

seconds=20; date1=$((`date +%s` + $seconds)); 
while [ "$date1" -ge `date +%s` ]; do 
  echo -ne "$(date -u --date @$(($date1 - `date +%s` )) +%H:%M:%S)\r"; 
done

Bạn có thể kết hợp chúng thành các lệnh đơn giản bằng cách sử dụng các hàm bash (hoặc bất kỳ shell nào bạn thích). Trong bash, hãy thêm các dòng này vào ~/.bashrc(dòng sleep 0.1sẽ khiến hệ thống chờ 1/10 giây giữa mỗi lần chạy để bạn không spam CPU của mình):

function countdown(){
   date1=$((`date +%s` + $1)); 
   while [ "$date1" -ge `date +%s` ]; do 
     echo -ne "$(date -u --date @$(($date1 - `date +%s`)) +%H:%M:%S)\r";
     sleep 0.1
   done
}
function stopwatch(){
  date1=`date +%s`; 
   while true; do 
    echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r"; 
    sleep 0.1
   done
}

Sau đó, bạn có thể bắt đầu đồng hồ đếm ngược trong một phút bằng cách chạy:

countdown 60

Bạn có thể đếm ngược hai giờ với:

countdown $((2*60*60))

hoặc cả ngày sử dụng:

countdown $((24*60*60))

Và khởi động đồng hồ bấm giờ bằng cách chạy:

stopwatch

Nếu bạn cần có khả năng xử lý các ngày cũng như giờ, phút và giây, bạn có thể làm một việc như thế này:

countdown(){
    date1=$((`date +%s` + $1));
    while [ "$date1" -ge `date +%s` ]; do 
    ## Is this more than 24h away?
    days=$(($(($(( $date1 - $(date +%s))) * 1 ))/86400))
    echo -ne "$days day(s) and $(date -u --date @$(($date1 - `date +%s`)) +%H:%M:%S)\r"; 
    sleep 0.1
    done
}
stopwatch(){
    date1=`date +%s`; 
    while true; do 
    days=$(( $(($(date +%s) - date1)) / 86400 ))
    echo -ne "$days day(s) and $(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
    sleep 0.1
    done
}

Lưu ý rằng stopwatchchức năng đã không được thử nghiệm trong nhiều ngày vì tôi không thực sự muốn đợi 24 giờ cho nó. Nó sẽ hoạt động nhưng xin vui lòng cho tôi biết nếu nó không.


9
Tôi đã thêm các chức năng tốt đẹp này vào .zshrcngay sau khi tôi đọc câu trả lời của bạn. Hôm nay tôi đã sử dụng countdownlần đầu tiên và nhận thấy việc sử dụng CPU khá cao. Tôi đã thêm một sleep 0.1(Tôi không biết nếu thời gian ngủ của một phần giây được hỗ trợ trên tất cả các hệ thống) đã cải thiện điều đó rất nhiều. Hạn chế tất nhiên là độ chính xác hiển thị kém chính xác hơn, nhưng tôi có thể sống với độ lệch tối đa. 100ms.
mpy

@mpy cảm ơn vì đã đề cập đến điều đó. Tôi nhận được ~ 3% sử dụng CPU khi thực hiện trong này bash, tôi có thể sống với điều đó (mặc dù nó cao hơn tôi mong đợi và tôi cũng đã thêm giấc ngủ để .bashrc của riêng tôi).
terdon

3
Chỉ cần tìm thấy câu trả lời này. Tôi thấy việc đặt trở lại cỗ xe ở đầu câu lệnh echo trong chức năng đồng hồ bấm giờ rất tiện lợi vì nó có nghĩa là giết đồng hồ bấm giờ không ghi đè lên thời gian của đồng hồ bấm giờ hiện tại: echo -ne "\ r $ (date -u --date @ $ (( date +%s- $ date1)) +% H:% M:% S) ";
mkingston

3
@chishaku: Trên OS X, điều này dường như hoạt động với tôi: echo -ne "$(date -ju -f %s $(($date1 - ngày +% s )) +%H:%M:%S)\r";
dùng1071847

1
Với gói sox tôi sẽ thêm một âm thanh hay để phát vào cuối đếm ngược : play -q -n synth 2 pluck C5.
Pablo A

94

Cách yêu thích của tôi là:

Khởi đầu:

time cat

Dừng lại:

ctrl+c

Như @wjandrea đã nhận xét bên dưới, một phiên bản khác sẽ chạy:

time read

và nhấn Enterđể dừng lại



8
tương tự, nhưng bạn có thể nhấn Enter để dừng nó:time read
wjandrea

10
time readthất bại trong zsh, nhưng time (read)hoạt động.
Sparhawk

Vấn đề là mặc dù, bạn không thể nhìn thấy thời gian mà không hủy bỏ nó hoặc hoàn thành nó. Khi bạn khởi động lại nó, bộ đếm thời gian bắt đầu lại.
Zelphir Kaltstahl

39

Tôi đã tìm kiếm điều tương tự và cuối cùng đã viết một cái gì đó phức tạp hơn trong Python:

Điều này sẽ cung cấp cho bạn đếm ngược 10 giây đơn giản:

sudo pip install termdown
termdown 10

Nguồn: https://github.com/trehn/termdown


1
@DoktoroReichard: Chà, đây là một liên kết tải xuống.
harrymc

1
@Suhaib: Nó nên và làm cho tôi. Vui lòng nêu vấn đề trên GitHub với nhiều thông tin hơn.
trehn

1
Tôi thích nó - đây là con hẻm của tôi
Wayne Werner

1
Rất hay, tôi thích ASCII
Guillermo

1
Điều này thực sự mát mẻ! 😄
orschiro

13

Tôi đã sử dụng cái này:

countdown()
(
  IFS=:
  set -- $*
  secs=$(( ${1#0} * 3600 + ${2#0} * 60 + ${3#0} ))
  while [ $secs -gt 0 ]
  do
    sleep 1 &
    printf "\r%02d:%02d:%02d" $((secs/3600)) $(( (secs/60)%60)) $((secs%60))
    secs=$(( $secs - 1 ))
    wait
  done
  echo
)

Thí dụ:

 countdown "00:07:55"

Đây là một nguồn .


2
Tương thích POSIX - hoạt động trên OS X :)
djule5 24/2/2015

13
sh-3.2# man leave

đặt hẹn giờ trong 15 phút

sh-3.2# leave +0015
Alarm set for Thu Nov  3 14:19:31 CDT 2016. (pid 94317)
sh-3.2#

chỉnh sửa: Tôi đã có một loạt các liên kết mở, và tôi nghĩ rằng điều này là cụ thể cho osx, xin lỗi về điều đó. Để lại câu trả lời của tôi để những người khác biết về việc rời khỏi BSD.


1
cũng hoạt động trong Linux, nhưng trước tiên bạn phải cài đặt chương trình rời khỏi kho lưu trữ mặc định.
karel

6

Đây là một chiếc đồng hồ bấm giờ với một phần trăm giây:

#!/usr/bin/awk -f
function z() {
  getline < "/proc/uptime"
  close("/proc/uptime")
  return $0
}
BEGIN {
  x = z()
  while (1) {
    y = z()
    printf "%02d:%05.2f\r", (y - x) / 60, (y - x) % 60
  }
}

Thí dụ


Giải pháp chỉ dành cho Linux! Tôi yêu việc thiếu các cuộc gọi bên ngoài. Lưu ý, hệ thống Debian của tôi có hai giá trị trong / Proc / thời gian hoạt động, với giá trị thứ hai có lẽ đề cập đến thời gian hoạt động trước đó của tôi. Kịch bản này có thể được điều chỉnh để khắc phục bằng cách thay đổi dòng 5 thànhreturn $1
Adam Katz

4

Tôi đã kết hợp câu trả lời của terdon rất tốt, vào chức năng đồng thời hiển thị thời gian kể từ khi bắt đầu và thời gian cho đến khi kết thúc. Ngoài ra còn có ba biến thể để dễ gọi hơn (bạn không phải làm bash math) và nó cũng được trừu tượng hóa. Ví dụ sử dụng :

{ ~ }  » time_minutes 15
Counting to 15 minutes
Start at 11:55:34     Will finish at 12:10:34
     Since start: 00:00:08     Till end:  00:14:51

Và một cái gì đó như bộ đếm thời gian làm việc:

{ ~ }  » time_hours 8
Counting to 8 hours
Start at 11:59:35   Will finish at 19:59:35
     Since start: 00:32:41     Till end:  07:27:19

Và nếu bạn cần một thời gian rất cụ thể:

{ ~ }  » time_flexible 3:23:00
Counting to 3:23:00 hours
Start at 12:35:11   Will finish at 15:58:11
     Since start: 00:00:14     Till end:  03:22:46

Đây là mã để đưa vào .bashrc của bạn

function time_func()
{
   date2=$((`date +%s` + $1));
   date1=`date +%s`;
   date_finish="$(date --date @$(($date2)) +%T )"

   echo "Start at `date +%T`   Will finish at $date_finish"

    while [ "$date2" -ne `date +%s` ]; do
     echo -ne "     Since start: $(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)     Till end:  $(date -u --date @$(($date2 - `date +%s`)) +%H:%M:%S)\r";
     sleep 1
    done

    printf "\nTimer finished!\n"
    play_sound ~/finished.wav
}

function time_seconds()
{
  echo "Counting to $1 seconds"
  time_func $1
}

function time_minutes()
{
  echo "Counting to $1 minutes"
  time_func $1*60
}

function time_hours()
{
  echo "Counting to $1 hours"
  time_func $1*60*60
}

function time_flexible()  # accepts flexible input hh:mm:ss
{
    echo "Counting to $1"
    secs=$(time2seconds $1)
    time_func $secs
}

function play_sound()  # adjust to your system
{
    cat $1 > /dev/dsp
}

function time2seconds() # changes hh:mm:ss to seconds, found on some other stack answer
{ 
    a=( ${1//:/ }) 
    echo $((${a[0]}*3600+${a[1]}*60+${a[2]})) 
}

Kết hợp điều này với một số cách phát âm thanh trong thiết bị đầu cuối linux ( phát tệp mp3 hoặc wav qua dòng lệnh Linux ) hoặc cygwin ( cat /path/foo.wav > /dev/dsp hoạt động với tôi trong babun / win7) và bạn có bộ hẹn giờ linh hoạt đơn giản với báo thức !


4

Cách tiếp cận khác

countdown=60 now=$(date +%s) watch -tpn1 echo '$((now-$(date +%s)+countdown))'

Đối với máy Mac:

countdown=60 now=$(date +%s) watch -tn1 echo '$((now-$(date +%s)+countdown))'
#no p option on mac for watch

Nếu người ta muốn có tín hiệu khi nó về 0, ví dụ, người ta có thể xây dựng nó bằng một lệnh trả về trạng thái thoát khác không ở mức 0 và kết hợp nó với watch -b, hoặc một cái gì đó, nhưng nếu người ta muốn xây dựng một kịch bản phức tạp hơn, thì đây có lẽ là không phải là con đường để đi; nó là một giải pháp loại "nhanh và bẩn".


Tôi thích watchchương trình nói chung. Lần đầu tiên tôi nhìn thấy nó sau khi tôi đã viết vô số while sleep 5; dovòng lặp cho các hiệu ứng khác nhau. watchđã đẹp hơn


3

Cuối cùng tôi đã viết kịch bản shell của riêng mình: github gist

#!/bin/sh
# script to create timer in terminal
# Jason Atwood
# 2013/6/22

# start up
echo "starting timer script ..."
sleep 1 # seconds

# get input from user
read -p "Timer for how many minutes?" -e DURATION
DURATION=$(( $DURATION*60 )) # convert minutes to seconds

# get start time
START=$(date +%s)

# infinite loop
while [ -1 ]; do
clear # clear window

# do math
NOW=$(date +%s) # get time now in seconds
DIF=$(( $NOW-$START ))  # compute diff in seconds
ELAPSE=$(( $DURATION-$DIF ))    # compute elapsed time in seconds
MINS=$(( $ELAPSE/60 ))  # convert to minutes... (dumps remainder from division)
SECS=$(( $ELAPSE - ($MINS*60) )) # ... and seconds

# conditional
if [ $MINS == 0 ] && [ $SECS == 0 ] # if mins = 0 and secs = 0 (i.e. if time expired)
then # blink screen
for i in `seq 1 180`; # for i = 1:180 (i.e. 180 seconds)
do
clear # flash on
setterm -term linux -back red -fore white # use setterm to change background color
echo "00:00 " # extra tabs for visibiltiy

sleep 0.5

clear # flash off
setterm -term linux -default # clear setterm changes from above
echo "00:00" # (i.e. go back to white text on black background)
sleep 0.5
done # end for loop
break   # end script

else # else, time is not expired
echo "$MINS:$SECS"  # display time
sleep 1 # sleep 1 second
fi  # end if
done    # end while loop 

1
Kịch bản hay, +1. Chỉ để bạn biết, đó là đồng hồ đếm ngược, không phải đồng hồ bấm giờ.
terdon

ha bạn nói đúng, đó là những gì tôi thực sự muốn. Tôi sẽ cập nhật tên của tôi.
tir38

3

Tôi ngạc nhiên khi không ai sử dụng sleepenhcông cụ này trong các tập lệnh của họ. Thay vào đó, các giải pháp được đề xuất sử dụng sleep 1giữa các đầu ra bộ đếm thời gian tiếp theo hoặc một vòng lặp bận rộn xuất ra càng nhanh càng tốt. Điều này là không đủ bởi vì thời gian nhỏ dành cho việc in ấn, đầu ra sẽ không thực sự xảy ra một lần mỗi giây mà ít hơn một chút so với mức tối ưu. Sau khi đủ thời gian trôi qua, bộ đếm sẽ bỏ qua một giây. Cái sau là không đủ vì nó giữ CPU bận mà không có lý do chính đáng.

Công cụ mà tôi có trong $PATHngoại hình của mình như thế này:

#!/bin/sh
if [ $# -eq 0 ]; then
    TIMESTAMP=$(sleepenh 0)
    before=$(date +%s)
    while true; do
        diff=$(($(date +%s) - before))
        printf "%02d:%02d:%02d\r" $((diff/3600)) $(((diff%3600)/60)) $((diff%60))
        TIMESTAMP=$(sleepenh $TIMESTAMP 1.0);
    done
    exit 1 # this should never be reached
fi
echo "counting up to $@"
"$0" &
counterpid=$!
trap "exit" INT TERM
trap "kill 0" EXIT
sleep "$@"
kill $counterpid

Kịch bản có thể được sử dụng làm đồng hồ bấm giờ (đếm cho đến khi bị gián đoạn) hoặc như một bộ đếm thời gian chạy trong khoảng thời gian được chỉ định. Vì sleeplệnh được sử dụng, tập lệnh này cho phép chỉ định thời lượng cần tính chính xác như mức sleepcho phép của bạn . Trên Debian và các dẫn xuất, điều này bao gồm các giấc ngủ phụ thứ hai và một cách dễ đọc của con người để xác định thời gian. Vì vậy, ví dụ bạn có thể nói:

$ time countdown 2m 4.6s
countdown 2m 4.6s  0.00s user 0.00s system 0% cpu 2:04.60 total

Và như bạn có thể thấy, lệnh chạy chính xác trong 2 phút và 4,6 giây mà không có nhiều phép thuật trong chính kịch bản.

CHỈNH SỬA :

Công cụ ngủenh xuất phát từ gói cùng tên trong Debian và các dẫn xuất của nó như Ubuntu. Đối với các bản phân phối không có nó, nó đến từ https://github.com/nsc-deb/s ngủenh

Ưu điểm của Sleepenh là, nó có thể tính đến sự chậm trễ nhỏ tích lũy theo thời gian từ việc xử lý những thứ khác ngoài giấc ngủ trong một vòng lặp. Ngay cả khi một người chỉ sleep 1trong một vòng lặp 10 lần, thì việc thực hiện tổng thể sẽ mất hơn 10 giây một chút vì chi phí nhỏ xuất phát từ việc thực hiện sleepvà lặp lại vòng lặp. Lỗi này từ từ tích lũy và theo thời gian sẽ khiến đồng hồ bấm giờ của chúng ta ngày càng thiếu chính xác. Để khắc phục vấn đề này, mỗi lần lặp phải tính toán thời gian chính xác để ngủ thường ít hơn một giây (đối với bộ định thời khoảng một giây). Công cụ ngủenh làm điều này cho bạn.


Tôi không hiểu điều này mang lại lợi ích gì cho câu trả lời của tôi cũng sử dụng sleep 0.1. Cái gì sleepnh(tôi không thể tìm thấy nó trong Arch repos) và nó khác với sleepcái gì? Theo như tôi có thể nói, về cơ bản bạn đang làm điều tương tự như câu trả lời của tôi ở trên. Tôi đang thiếu gì?
terdon

@terdon Sleepenh xuất phát từ đây github.com/nsc-deb/s ngủenh Vấn đề chỉ cần nói sleep 5là, bạn không ngủ đúng 5 giây. Hãy thử ví dụ time sleep 5và bạn thấy rằng việc chạy lệnh mất hơn 5 giây một chút. Theo thời gian các lỗi tích lũy. Tiện ích ngủenh cho phép dễ dàng tránh sự tích lũy lỗi này.
josch

ĐỒNG Ý. Trên hệ thống của tôi, tôi thấy một lỗi 0,002 giây. Tôi thực sự nghi ngờ bất cứ ai sẽ sử dụng loại công cụ này và mong đợi tốt hơn độ chính xác đến mili giây, nhưng sẽ tốt hơn nếu bạn ít nhất chỉnh sửa câu trả lời của mình và tôi) giải thích tại sao sleepnhtốt hơn sleep(bạn chỉ nói những câu trả lời khác sử dụng cách sleep 1mà họ không làm , chỉ OP sử dụng điều đó) và ii) nơi để có được nó và cách cài đặt nó vì nó không phải là một công cụ tiêu chuẩn.
terdon

1
@terdon Tôi đã giải thích sự khác biệt giữa sleepsleepenhtrong đoạn đầu tiên. Dù sao, tôi có lẽ không đủ rõ ràng về điều đó nên cuối cùng tôi đã mở rộng thêm về điều đó. Các vấn đề chính xác mili giây là những gì bạn nhận được khi gọi sleepmột lần. Chúng tích lũy theo thời gian và tại một số điểm đáng chú ý. Tôi không nói rằng những người khác chỉ sử dụng sleep 1. Tôi nói rằng họ sử dụng sleep 1hoặc một busyloop. Mà họ vẫn làm. Chỉ cho tôi một ví dụ truy cập. Câu trả lời sleep 0.1giống như những câu trả lời sleep 1ngoại trừ việc chúng tích lũy lỗi thậm chí nhanh hơn.
josch

Tôi đi xuống câu trả lời tìm kiếm ai đó ít nhất là thừa nhận sự tồn tại của vấn đề bạn đã giải quyết.
mariotomo

2

Câu trả lời ngắn:

for i in `seq 60 -1 1` ; do echo -ne "\r$i " ; sleep 1 ; done

Giải trình:

Tôi biết có rất nhiều câu trả lời, nhưng tôi chỉ muốn đăng một cái gì đó rất gần với câu hỏi của OP, cá nhân tôi sẽ chấp nhận thực sự là " đếm ngược oneliner trong thiết bị đầu cuối ". Mục tiêu của tôi là:

  1. Lót.
  2. Đếm ngược.
  3. Dễ nhớ và gõ trong bảng điều khiển (không có chức năng và logic nặng, chỉ bash).
  4. Không yêu cầu phần mềm bổ sung để cài đặt (có thể được sử dụng trên bất kỳ máy chủ nào tôi truy cập qua ssh, ngay cả khi tôi không có root ở đó).

Làm thế nào nó hoạt động:

  1. seq in số từ 60 đến 1.
  2. echo -ne "\r$i "trả về dấu mũ để bắt đầu chuỗi và in $igiá trị hiện tại . Không gian sau khi được yêu cầu ghi đè giá trị trước đó, nếu nó dài hơn ký tự so với hiện tại $i(10 -> 9).

1
Điều này hoạt động tốt nhất cho trường hợp sử dụng của tôi trên Mac OS để sử dụng trong tập lệnh bash. Giải thích về cách thức hoạt động của nó là rất hữu ích.
James Campbell

1

Để tham khảo trong tương lai, có một công cụ dòng lệnh gọi làTimTimer với các tùy chọn dòng lệnh rất đơn giản cho đồng hồ đếm ngược / đếm ngược.


1

Giả vờ bạn là một người trên OSX đang tìm kiếm đồng hồ bấm giờ dòng lệnh. Giả vờ rằng bạn không muốn cài đặt các công cụ gnu và chỉ muốn chạy với unixdate

trong trường hợp đó, hãy làm như @terdon nói nhưng với sửa đổi này:

function stopwatch(){
    date1=`date +%s`; 
    while true; do 
        echo -ne "$(date -jf "%s" $((`date +%s` - $date1)) +%H:%M:%S)\r"; 
        sleep 0.1
    done
}

1
Tôi đã dùng thử trên OS X El Capitan, vì một số lý do, nó bắt đầu từ 16:00:00
nopole

1

Đơn giản chỉ cần sử dụng đồng hồ + ngày trong thời gian UTC. Bạn cũng có thể cài đặt một số gói cho màn hình lớn ...

export now="`date +%s -u`";
watch -n 0,1 'date +%T -u -d @$((`date +%s` - $now ))'

#Big plain characters
watch -n 0,1 'date +%T -u -d @$((`date +%s` - $now )) | toilet -f mono12'

#Big empty charaters
watch -n 0,1 'date +%T -u -d @$((`date +%s` - $now )) | figlet -c -f big'

Thử nó!

Xem thêm http://www.cyberciti.biz/faq/create-large-colorful-text-banner-on-screen/


1

sw là một chiếc đồng hồ bấm giờ đơn giản sẽ chạy mãi mãi.

sw

Tải về

wget -q -O - http://git.io/sinister | sh -s -- -u https://raw.githubusercontent.com/coryfklein/sw/master/sw

Sử dụng

sw
 - start a stopwatch from 0, save start time in ~/.sw
sw [-r|--resume]
 - start a stopwatch from the last saved start time (or current time if no last saved start time exists)
 - "-r" stands for --resume

1

Một ví dụ về con trăn:

#!/usr/bin/python

def stopwatch ( atom = .01 ):
    import time, sys, math

    start = time.time()
    last = start
    sleep = atom/2
    fmt = "\r%%.%sfs" % (int(abs(round(math.log(atom,10))))  if atom<1 else "")
    while True:
        curr = time.time()
        subatom = (curr-last)
        if subatom>atom:
            # sys.stdout.write( "\r%.2fs" % (curr-start))
            sys.stdout.write( fmt % (curr-start))
            sys.stdout.flush()
            last = curr
        else:
            time.sleep(atom-subatom)

stopwatch()

bản giới thiệu


1

Hãy xem TermTime , đây là một chiếc đồng hồ và đồng hồ bấm giờ tuyệt vời dựa trên thiết bị đầu cuối:

pip install termtime


0

Điều này tương tự như câu trả lời được chấp nhận, nhưng terdon countdown()đã cho tôi lỗi cú pháp. Điều này làm việc rất tốt cho tôi, mặc dù:

function timer() { case "$1" in -s) shift;; *) set $(($1 * 60));; esac; local S=" "; for i in $(seq "$1" -1 1); do echo -ne "$S\r $i\r"; sleep 1; done; echo -e "$S\rTime's up!"; }

Bạn có thể đặt nó vào .bashrcvà sau đó thực hiện với: timer t(trong đó t là thời gian tính bằng phút).


0

Tìm thấy câu hỏi này sớm hơn ngày hôm nay, khi tìm kiếm một ứng dụng hạn để hiển thị đồng hồ đếm ngược lớn cho một hội thảo. Không có gợi ý nào là chính xác những gì tôi cần, vì vậy tôi nhanh chóng kết hợp một đề xuất khác trong Go: https://github.com/bnaucler/cdown

Vì câu hỏi đã được trả lời đầy đủ, hãy xem xét điều này là vì lợi ích của hậu thế.



0

Phiên bản GUI của đồng hồ bấm giờ

date1=`date +%s`
date1_f=`date +%H:%M:%S____%d/%m`
(
  while true; do 
    date2=$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)
    echo "# started at $date1_f \n$date2"
  done
) |
zenity --progress \
  --title="Stop Watch" \
  --text="Stop Watch..." \
  --percentage=0

-2

Nếu bạn muốn một chương trình có khả năng biên dịch vì bất kỳ lý do gì, những điều sau đây sẽ hoạt động:

#include <iostream>
#include <string>
#include <chrono>

int timer(seconds count) {
  auto t1 = high_resolution_clock::now();
  auto t2 = t1+count;
  while ( t2 > high_resolution_clock::now()) {
    std::cout << "Seconds Left:" <<
    std::endl <<
      duration_cast<duration<double>>(count-(high_resolution_clock::now()-t1)).count() << 
    std::endl << "\033[2A\033[K";
    std::this_thread::sleep_for(milliseconds(100));
  }
  std::cout << "Finished" << std::endl;
  return 0;
}

Điều này có thể được sử dụng trong các chương trình khác cũng như dễ dàng chuyển, nếu môi trường bash không có sẵn hoặc bạn chỉ thích sử dụng một chương trình được biên dịch

github

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.