টার্মিনালে একটি কাউন্টডাউন বা স্টপওয়াচ টাইমার প্রদর্শন করার কোনও উপায় আছে কি?


143

আমি কীভাবে লিনাক্স টার্মিনালে একটি রিয়েল-টাইম কাউন্টডাউন টাইমার প্রদর্শন করতে পারি? এটি করার জন্য একটি লাইন রয়েছে কি বিদ্যমান?


@ ইটারডন ধন্যবাদ, আমি দেখতে পাচ্ছি যে এটি কীভাবে আরও ভাল প্রশ্ন।
tir38

উত্তর:


183

আপনার প্রয়োজনের বিষয়ে আমি নিশ্চিত নই beep, আপনার যদি যা চান সমস্ত স্টপওয়াচ হয় তবে আপনি এটি করতে পারেন:

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

এটি আপনাকে রিয়েলটাইমে পাস হওয়া সেকেন্ডগুলি দেখাবে এবং আপনি এটি Ctrl+ সহ বন্ধ করতে পারবেন C। আপনার যদি আরও বৃহত্তর নির্ভুলতার প্রয়োজন হয় তবে আপনি এটি ন্যানোসেকেন্ডগুলি দিতে ব্যবহার করতে পারেন:

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

অবশেষে, আপনি যদি সত্যিই সত্যিই "স্টপ ওয়াচ ফর্ম্যাট" চান, যেখানে সবকিছু 0 থেকে শুরু হয় এবং বাড়তে শুরু করে, আপনি এরকম কিছু করতে পারেন:

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

একটি কাউন্টডাউন টাইমারের জন্য (যা আপনার মূল প্রশ্নটি জিজ্ঞাসা করে না) আপনি এটি করতে পারেন (সে অনুযায়ী সেকেন্ড পরিবর্তন করুন):

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

আপনি এটিকে ব্যাশ (বা যে কোনও শেল আপনি পছন্দ করুন) ফাংশন ব্যবহার করে সাধারণ কমান্ডগুলিতে একত্রিত করতে পারেন। ব্যাশে, আপনার এই লাইনগুলি যুক্ত করুন ~/.bashrc( sleep 0.1প্রতিটি রানের মধ্যে সিস্টেমটি এক সেকেন্ডের 1/10 তম অপেক্ষা করবে যাতে আপনি নিজের সিপিইউ স্প্যাম না করেন):

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
}

তারপরে আপনি চালিয়ে এক মিনিটের একটি কাউন্টডাউন টাইমার শুরু করতে পারেন:

countdown 60

আপনি এর সাথে দুই ঘন্টা গণনা করতে পারেন:

countdown $((2*60*60))

বা একটি পুরো দিন ব্যবহার করে:

countdown $((24*60*60))

এবং স্টপওয়াচটি চালিয়ে শুরু করুন:

stopwatch

আপনার যদি দিনের পাশাপাশি ঘন্টা, মিনিট এবং সেকেন্ড মোকাবেলা করতে সক্ষম হতে হয় তবে আপনি এরকম কিছু করতে পারেন:

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
}

মনে রাখবেন যে stopwatchফাংশনটি কয়েকদিন পরীক্ষা করা হয়নি কারণ আমি সত্যিই এটির জন্য 24 ঘন্টা অপেক্ষা করতে চাইনি। এটি কাজ করা উচিত তবে দয়া করে আমাকে জানাবেন যদি এটি না হয়।


9
.zshrcআপনার উত্তরটি পড়ার পরে আমি আমার ডানদিকে এই দুর্দান্ত ফাংশনগুলি যুক্ত করেছি । আজ আমি countdownপ্রথমবার ব্যবহার করেছি এবং এর পরিবর্তে উচ্চতর সিপিইউ ব্যবহার লক্ষ্য করেছি। আমি একটি যুক্ত করেছি sleep 0.1(আমি জানি না যে সমস্ত সিস্টেমে ভগ্নাংশ দ্বিতীয়ের ঘুমের সময় সমর্থনযোগ্য কিনা) যা এতে অনেক উন্নতি হয়েছে। অপূর্ণতা অবশ্যই কম সঠিক ডিসপ্লে নির্ভুলতা, তবে আমি সর্বোচ্চের বিচ্যুতি নিয়ে বাঁচতে পারি। 100 মিঃসে।
এমপি

@ এমপি তা উল্লেখ করার জন্য ধন্যবাদ এই করছেন আমি ~ 3% CPU ব্যবহারের পাচ্ছি bash, আমি সঙ্গে বসবাস করতে পারেন (যদিও এটা হয় বেশী আমি আশা এবং আমি আমার নিজের .bashrc করার ঘুম যোগ করেছিলেন)।
টেরডন

3
সবে এই উত্তরটি খুঁজে পেয়েছি। আমি দেখতে পেলাম যে প্রতিধ্বনি বিবরণের শুরুতে স্টপওয়াচ ফাংশনটিতে ক্যারেজ রিটার্ন রাখা সহজ ছিল কারণ এটি স্টপওয়াচটি হত্যা করা বর্তমান স্টপওয়াচের সময়টিকে ওভাররাইট করে না: ইকো -নে "\ r $ (তারিখ -u - তারিখ @ $ (( date +%s- $ তারিখ 1)) +% এইচ:% এম:% এস) ";
মকিংস্টন

3
@ চিশাকু: ওএস এক্স-এ, এটি আমার পক্ষে কাজ করেছে বলে মনে হয়েছে: echo -ne "$(date -ju -f %s $(($date1 - তারিখ +% s )) +%H:%M:%S)\r";
ব্যবহারকারী 1071847

1
সঙ্গে সক্স প্যাকেজ আমি কাউন্টডাউন শেষে খেলতে একটি চমৎকার শব্দ যোগ হবে: play -q -n synth 2 pluck C5
পাবলো বিয়ানচি

94

আমার প্রিয় উপায়টি হ'ল:

শুরু করুন:

time cat

বন্ধ করুন:

ctrl+c

@ Wjandrea নীচে মন্তব্য হিসাবে, অন্য সংস্করণ চালানো হয়:

time read

এবং Enterথামাতে টিপুন



8
অনুরূপ, তবে এটি বন্ধ করতে আপনি এন্টার টিপতে পারেন:time read
wjandrea

10
time readzsh এ ব্যর্থ হয়, কিন্তু time (read)কাজ করে।
স্পারহাক

সমস্যাটি হ'ল, সময়টি বাতিল করা বা শেষ না করেই আপনি সময়টি দেখতে পাচ্ছেন না। আপনি যখন এটি পুনরায় চালু করবেন তখন টাইমারটি নতুনভাবে শুরু হয়।
জেলফির কাল্টসটহল

37

আমি একই জিনিসটির সন্ধান করছিলাম এবং পাইথনে আরও বিস্তৃত কিছু লেখা শেষ করেছি:

এটি আপনাকে একটি সাধারণ 10 সেকেন্ডের গণনা দেবে:

sudo pip install termdown
termdown 10

সূত্র: https://github.com/trehn/termdown


1
@ ডক্টোরো রিচার্ড: আচ্ছা, এটি একটি ডাউনলোড লিঙ্ক।
harrymc

1
@ সুহাইব: এটা আমার পক্ষে করা উচিত এবং করা উচিত। আরও তথ্যের সাথে দয়া করে গিটহাবের উপর একটি সমস্যা উত্থাপন করুন।
ট্রেন

1
আমি এটি পছন্দ করি - এটি ঠিক আমার মজাদার
ওয়েন ওয়ার্নার

1
খুব সুন্দর, আমি ASCII পছন্দ করি
গিলারমো

1
এটা সত্যিই দুর্দান্ত! 😄
ওরচিরো

13

আমি এটি ব্যবহার করেছি:

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
)

উদাহরণ:

 countdown "00:07:55"

এখানে একটি উত্স



13
sh-3.2# man leave

15 মিনিটের জন্য একটি টাইমার সেট করুন

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

সম্পাদনা: আমার বেশ কয়েকটি লিঙ্ক খোলা ছিল এবং আমি ভেবেছিলাম এটি অসক্সের সাথে নির্দিষ্ট, এটি সম্পর্কে দুঃখিত। আমার উত্তর ছেড়ে দেওয়া যাতে অন্যরা বিএসডি ছেড়ে যাওয়ার বিষয়ে সচেতন হয়।


1
লিনাক্সেও লিভ কাজ করে, তবে প্রথমে আপনাকে ডিফল্ট সংগ্রহস্থলগুলি থেকে ছুটি প্রোগ্রামটি ইনস্টল করতে হবে।
কারেল

6

এটি একশো সেকেন্ডের দ্বিতীয় সহ স্টপওয়াচের জন্য:

#!/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
  }
}

উদাহরণ


চমৎকার লিনাক্স-একমাত্র সমাধান! আমি বাহ্যিক কলগুলির অভাব পছন্দ করি। দ্রষ্টব্য, আমার দেবিয়ান সিস্টেমের / প্রোম / আপটাইমে দুটি মান রয়েছে, দ্বিতীয়টি সম্ভবত আমার পূর্ববর্তী আপটাইমটিকে উল্লেখ করেছে। এই স্ক্রিপ্টটি প্রতিকার করতে সামঞ্জস্য করা যেতে পারে যে 5 থেকে লাইন পরিবর্তন করেreturn $1
অ্যাডাম কাটজ

4

আমি খুব ভাল টেরডনের উত্তরকে একত্রিত করেছি যা একই সাথে শুরু থেকে সময় এবং শেষ পর্যন্ত সময় প্রদর্শন করে। এছাড়াও তিনটি রূপ রয়েছে যাতে এটি কল করা সহজ হয় (আপনাকে বাশ গণিত করতে হবে না), এবং এটি বিমূর্তও রয়েছে। ব্যবহারের উদাহরণ :

{ ~ }  » 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

ওয়ার্ক টাইমার এর মতো কিছু:

{ ~ }  » 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

এবং আপনার যদি কিছু খুব নির্দিষ্ট সময় প্রয়োজন হয়:

{ ~ }  » 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

আপনার .bashrc এ দেওয়ার জন্য কোডটি এখানে

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]})) 
}

কিছু পথ সঙ্গে এই একত্রিত শব্দ বাজানো লিনাক্স টার্মিনাল (ইন খেলা MP3 বা WAV ফাইল লিনাক্স কম্যান্ড লাইনের মাধ্যমে ) অথবা cygwin ( cat /path/foo.wav > /dev/dsp babun / Win7 আমার জন্য কাজ করে) এবং আপনি একটি আছে বিপদাশঙ্কা সঙ্গে সহজ নমনীয় টাইমার !


4

অন্য পদ্ধতির

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

ম্যাকের জন্য:

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

যদি শূন্যকে হিট করে কেউ যদি সিগন্যাল চায় তবে এটি উদাহরণস্বরূপ একটি কমান্ড দিয়ে এটি তৈরি করতে পারে যা শূন্যে নন-শূন্য প্রস্থান স্থিতি ফিরে আসে এবং এটি watch -bবা অন্য কোনওটির সাথে একত্রিত করে , তবে যদি কেউ আরও বিস্তৃত স্ক্রিপ্ট তৈরি করতে চায় তবে এটি সম্ভবত যাওয়ার উপায় নয়; এটি একটি "দ্রুত এবং নোংরা ওয়ান-লাইনার" ধরণের সমাধান বেশি।


আমি watchসাধারণভাবে প্রোগ্রাম পছন্দ করি । আমি ইতিমধ্যে এটি দেখেছি আমি ইতিমধ্যে while sleep 5; doবিভিন্ন প্রভাবগুলিতে অসংখ্য লুপ লিখেছি । watchবুদ্ধিমানভাবে ভাল ছিল।


3

আমি আমার নিজের শেল স্ক্রিপ্টটি লিখে শেষ করেছি: গিথুব গিস্ট

#!/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
চমৎকার স্ক্রিপ্ট, +1। ঠিক তাই আপনি জানেন, এটি একটি কাউন্টডাউন টাইমার, স্টপওয়াচ নয়।
টেরডন

হা ঠিক বলেছেন, আমি যা চেয়েছিলাম তা ঠিক আছে। আমি আমার নাম আপডেট করব।
tir38

3

আমি অবাক হয়েছি যে কেউ sleepenhতাদের স্ক্রিপ্টগুলিতে এই সরঞ্জামটি ব্যবহার করেন নি । পরিবর্তে, প্রস্তাবিত সমাধানগুলি হয় sleep 1পরবর্তী টাইমার আউটপুটগুলির মধ্যে একটি ব্যস্ত লুপ ব্যবহার করে যা যত দ্রুত সম্ভব আউটপুট দেয় uts পূর্বেরটি অপর্যাপ্ত কারণ মুদ্রণটি ব্যয় করার জন্য অল্প সময় ব্যয় করার কারণে আউটপুট আসলে প্রতি সেকেন্ডে একবার হবে না তবে যা সাবঅপটিমাল তার চেয়ে কিছুটা কম হবে। পর্যাপ্ত সময় পার হওয়ার পরে, কাউন্টারটি দ্বিতীয়টি এড়িয়ে যাবে। পরবর্তীটি অপর্যাপ্ত কারণ এটি কোনও উপযুক্ত কারণে সিপিইউকে ব্যস্ত রাখে।

আমার $PATHচেহারাতে যে সরঞ্জামটি রয়েছে তা এর মতো:

#!/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

স্ক্রিপ্টটি হয় স্টপ ওয়াচ (ব্যাঘাত না হওয়া পর্যন্ত গণনা) বা নির্দিষ্ট সময়ের জন্য চলমান টাইমার হিসাবে ব্যবহার করা যেতে পারে। যেহেতু sleepকমান্ডটি ব্যবহার করা হয়েছে, এই স্ক্রিপ্টটি আপনার sleepঅনুমতি অনুসারে একই নির্ভুলতায় গণনা করার সময়কাল নির্দিষ্ট করতে অনুমতি দেয়। ডেবিয়ান এবং ডেরিভেটিভগুলিতে, এর মধ্যে উপ-দ্বিতীয় ঘুম এবং সময় উল্লেখ করার জন্য একটি দুর্দান্ত মানব-পঠনযোগ্য উপায় অন্তর্ভুক্ত রয়েছে। সুতরাং উদাহরণস্বরূপ আপনি বলতে পারেন:

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

এবং আপনি দেখতে পাচ্ছেন, কমান্ডটি ঠিক 2 মিনিট 4.6 সেকেন্ডের জন্য স্ক্রিপ্টে খুব বেশি যাদু ছাড়াই চলেছিল।

সম্পাদনা :

স্লিপেনহ হাতিয়ারটি ডেবিয়ান এবং উবুন্টুর মতো এর ডেরাইভেটিভগুলির একই নামের প্যাকেজ থেকে আসে। যেগুলি বিতরণ নেই এটির জন্য এটি https://github.com/nsc-deb/sleepenh থেকে আসে

স্লিপেনের সুবিধা হ'ল এটি লুপের সময় ঘুমের চেয়ে অন্য জিনিসগুলির প্রক্রিয়াজাতকরণ থেকে সময়ের সাথে সাথে যে ক্ষুদ্র বিলম্ব জমে থাকে তা আমলে নিতে সক্ষম। এমনকি যদি sleep 1কোনওটি কেবল 10 বার লুপে আসে sleepতবে লুপটি সঞ্চালন ও পুনরুক্তকরণ থেকে আসা ছোট ওভারহেডের কারণে সামগ্রিক সম্পাদনটি 10 ​​সেকেন্ডেরও বেশি সময় নেয়। এই ত্রুটিটি আস্তে আস্তে জমা হয় এবং সময়ের সাথে সাথে আমাদের স্টপওয়াচের টাইমারকে আরও বেশি করে নষ্ট করা হবে। এই সমস্যাটি সমাধানের জন্য, প্রতিটি লুপ পুনরাবৃত্তির অবশ্যই ঘুমানোর সঠিক সময়টি গণনা করতে হবে যা সাধারণত একটি সেকেন্ডের চেয়ে কিছুটা কম (এক সেকেন্ড অন্তর টাইমারগুলির জন্য)। ঘুমের সরঞ্জামটি আপনার জন্য এটি করে for


আমি বুঝতে পারছি না যে এটি আমার উত্তরগুলিরও কী সুবিধা দেয় যা এটিও ব্যবহার করে sleep 0.1। কী sleepnh(এটি আমি আর্চ রেপোগুলিতে খুঁজে পাচ্ছি না) এবং এটির থেকে কীভাবে আলাদা হয় sleep? আমি যতদূর বলতে পারি, আপনি মূলত আমার উপরের উত্তর হিসাবে একই জিনিস করছেন। আমি কী মিস করছি?
টেরডন

@ এটারডন স্লিপেনহ এখান থেকে এসেছে github.com/nsc-deb/sleepenh শুধু বলার সমস্যাটি sleep 5হ'ল, আপনি ঠিক 5 সেকেন্ডের জন্য ঘুমোবেন না। উদাহরণস্বরূপ চেষ্টা করুন time sleep 5এবং আপনি দেখতে পাচ্ছেন যে কমান্ডটি চালানো 5 সেকেন্ডেরও বেশি সময় নেয়। সময়ের সাথে সাথে ত্রুটিগুলি জমা হয়। স্লিপেনহ ইউটিলিটি সহজেই ত্রুটির এই জমাটি এড়াতে দেয়।
josch

ঠিক আছে. আমার সিস্টেমে আমি 0.002 সেকেন্ডের একটি ত্রুটি দেখতে পাচ্ছি। আমি সত্যিই সন্দেহ করি যে কেউ এই ধরণের সরঞ্জামটি ব্যবহার করবে এবং মিলিসেকেন্ড যথার্থতার চেয়ে ভাল আশা করবে, তবে আপনি যদি কমপক্ষে নিজের উত্তরটি সম্পাদনা করেন তবে ভাল হবে এবং আমি) এর sleepnhচেয়ে ভাল কেন তা ব্যাখ্যা করি sleep(আপনি কেবল অন্য উত্তরগুলি ব্যবহার করেন sleep 1- যা তারা ব্যবহার করে না , এবং কেবলমাত্র ওপি এটি ব্যবহার করে) এবং ii) এটি কোথায় পাবেন এবং এটি কীভাবে ইনস্টল করবেন তা এটি কোনও আদর্শ সরঞ্জাম নয়।
টেরডন

1
@terdon আমি প্রথম অনুচ্ছেদে sleepএবং এর sleepenhমধ্যে পার্থক্য বর্ণনা করেছি । যাইহোক, আমি সম্ভবত এটি যথেষ্ট পরিষ্কার ছিল না তাই আমি এর শেষে আরও প্রসারিত। মিলিসেকেন্ড নির্ভুলতার সমস্যাগুলি হ'ল sleepএকবার কল করার সময় আপনি যা পান । তারা সময়ের সাথে জমে এবং এক পর্যায়ে এটি লক্ষণীয়। আমি বলিনি যে অন্যরা কেবল ব্যবহার করে sleep 1। আমি বলেছিলাম যে তারা ব্যবহার করে sleep 1বা একটি ব্যস্তলুপ। যা তারা এখনও করে। আমাকে একটি পাল্টা উদাহরণ দেখান। উত্তরগুলি যেগুলি করে sleep 0.1সেগুলি একই রকম হয় sleep 1তবে তারা ত্রুটিগুলি আরও দ্রুত জমা করে।
josch

আপনার সমাধান করা সমস্যার অস্তিত্ব স্বীকার করে কমপক্ষে কারও সন্ধান করে আমি উত্তরগুলি নেমে এসেছি।
মারিওটোমো

2

সংক্ষিপ্ত উত্তর:

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

ব্যাখ্যা:

আমি জানি অনেক উত্তর আছে, তবে আমি কেবল ওপি-র প্রশ্নের খুব কাছাকাছি কিছু পোস্ট করতে চাই যে ব্যক্তিগতভাবে আমি সত্যই " টার্মিনালে অননায়ক গণনা " হিসাবে গ্রহণ করব । আমার লক্ষ্যগুলি ছিল:

  1. এক রৈখিক.
  2. কাউন্টডাউন।
  3. কনসোলে মনে রাখা এবং টাইপ করা সহজ (কোনও ফাংশন এবং ভারী যুক্তি নয়, কেবল বাশ)।
  4. ইনস্টল করার জন্য অতিরিক্ত সফ্টওয়্যার প্রয়োজন হয় না (এসএসএসের মাধ্যমে আমি যে কোনও সার্ভারে ব্যবহার করতে পারি, যদিও সেখানে রুট না থাকলেও)।

কিভাবে এটা কাজ করে:

  1. seq 60 থেকে 1 নম্বর মুদ্রণ করে।
  2. echo -ne "\r$i "স্ট্রিংয়ের শুরুতে ক্যারেট দেয় এবং বর্তমান $iমান মুদ্রণ করে । পূর্ববর্তী মানটি ওভাররাইট করার পরে প্রয়োজনীয় স্থান, যদি এটি বর্তমানের $i(10 -> 9) এর চেয়ে বেশি অক্ষর দ্বারা দীর্ঘ হয় ।

1
এটি ব্যাশ স্ক্রিপ্টে ব্যবহারের জন্য ম্যাক ওএসে আমার ব্যবহারের ক্ষেত্রে সবচেয়ে ভাল কাজ করেছে। এটি কীভাবে কাজ করে তার ব্যাখ্যা অতিরিক্ত সহায়ক।
জেমস ক্যাম্পবেল

1

ভবিষ্যতের রেফারেন্সের জন্য, একটি কমান্ডাউন / কাউন্ট-আপ টাইমারের জন্য খুব সোজা কমান্ড লাইন বিকল্পগুলির সাথে টাইমার নামে একটি কমান্ড লাইন সরঞ্জাম রয়েছে is


1

আপনি ওএসএক্সের কোনও ব্যক্তি কমান্ড লাইন স্টপওয়াচ সন্ধান করছেন বলে ভান করুন। আপনি যে gnu সরঞ্জাম ইনস্টল করতে চান না এবং কেবল ইউনিক্স দিয়ে চালাতে চান তা ভান করুনdate

সেক্ষেত্রে @terdon যা বলেছে তেমন করুন তবে এই পরিবর্তনটি দিয়ে:

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
আমি এটি ওএস এক্স এল ক্যাপিটেনে চেষ্টা করেছি, কোনও কারণে এটি 16:00:00
太極 者 無極 而 而

1

কেবলমাত্র ইউটিসির সময় ঘড়ির + তারিখ ব্যবহার করুন। আপনি বড় ডিসপ্লে জন্য কিছু প্যাকেজ ইনস্টল করতে পারেন ...

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'

চেষ্টা করে দেখুন!

Http://www.cyberciti.biz/faq/create-large-colorful-text-banner-on-screen/ এও দেখুন


1

sw একটি সাধারণ স্টপওয়াচ যা চিরকালের জন্য চলবে।

SW

ইনস্টল করুন

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

ব্যবহার

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

একটি অজগর উদাহরণ:

#!/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()

ডেমো


0

এটি গৃহীত উত্তরের মতো, তবে টেরডন countdown()আমাকে সিনট্যাক্স ত্রুটি দিয়েছে। যদিও এটি আমার জন্য দুর্দান্ত কাজ করে:

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!"; }

আপনি এটিতে রেখে দিতে পারেন .bashrcএবং এর সাথে চালিত করতে পারেন: timer t(যেখানে মিনিটের মধ্যে সময় হয়)।


0

একটি কর্মশালার জন্য একটি বৃহত কাউন্টডাউন টাইমার প্রদর্শনের জন্য একটি শব্দ অ্যাপ্লিকেশন সন্ধান করার সময়, আজকের এই প্রশ্নটি পাওয়া গিয়েছে। পরামর্শগুলির কোনওোটাই আমার প্রয়োজন মতো ছিল না, তাই আমি দ্রুত আরেকটি পরামর্শ গোতে একসাথে রেখেছিলাম: https://github.com/bnaucler/cdown

যেহেতু প্রশ্নের ইতিমধ্যে যথেষ্ট উত্তর দেওয়া হয়েছে, এটি উত্তরসূরির জন্য বিবেচনা করুন।


0

$ ঘুম 1500 && xterm -fg হলুদ -g 240x80 এবং

হলুদ পাঠ্যযুক্ত সেই বড় টার্মিনালটি যখন লাফিয়ে উঠে, সময় উঠতে এবং প্রসারিত করার সময়!

দ্রষ্টব্য: - 1500 সেকেন্ড = 25 মিনিটের পোমোডোরো - 240x80 = টার্মিনাল আকার 240 অক্ষর সারি, এবং 80 টি সারি। লক্ষণীয়ভাবে আমার জন্য একটি পর্দা পূরণ করুন।

ক্রেডিট: http://www.linuxquestions.org/questions/linux-newbie-8/countdown-timer-for-linux-949463/


0

স্টপওয়াচের একটি জিইউআই সংস্করণ

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

আপনি যে কোনও কারণে একটি সংকলন-সক্ষম প্রোগ্রাম করতে চাইলে, নিম্নলিখিতটি কাজ করবে:

#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;
}

এটি অন্যান্য প্রোগ্রামেও ব্যবহার করা যেতে পারে এবং সহজেই পোর্ট করা যায়, যদি কোনও বাশ পরিবেশ উপলব্ধ না হয় বা আপনি কেবল একটি সংকলিত প্রোগ্রাম ব্যবহার করতে পছন্দ করেন

GitHub

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.