जवाबों:
मुझे यकीन नहीं है कि आपको क्यों ज़रूरत है 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 घंटे इंतजार नहीं करना चाहता था। यह काम करना चाहिए, लेकिन कृपया मुझे बताएं कि क्या यह नहीं है।
bash
, मैं उस के साथ रह सकते हैं (हालांकि यह है उच्च मेरी अपेक्षा से और मैं भी मेरे अपने .bashrc को नींद जोड़ लिया है)।
date +%s
- $ date1)) +% H:% M:% S) ";
echo -ne "$(date -ju -f %s $(($date1 -
तारीख +% s )) +%H:%M:%S)\r"
;
play -q -n synth 2 pluck C5
:।
मेरा पसंदीदा तरीका है:
शुरू:
time cat
रुकें:
ctrl+c
जैसा कि @wjandrea ने नीचे टिप्पणी की, एक और संस्करण चलाना है:
time read
और Enter
रोकने के लिए दबाएँ
time read
time read
zsh में विफल रहता है, लेकिन time (read)
काम करता है।
मैं उसी चीज़ की तलाश में था और पायथन में कुछ और विस्तृत लिखना समाप्त कर दिया:
यह आपको एक सरल 10-सेकंड उलटी गिनती देगा:
sudo pip install termdown
termdown 10
मैंने इसका उपयोग किया है:
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"
यहाँ एक स्रोत है ।
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#
संपादित करें: मेरे पास लिंक का एक गुच्छा खुला था, और मुझे लगा कि यह ओएक्स के लिए विशिष्ट था, इसके बारे में क्षमा करें। मेरे जवाब को छोड़ दें तो दूसरों को बीएसडी पर छुट्टी के बारे में पता है।
यह स्टॉपवॉच सेकंड के सौवें हिस्से के लिए है:
#!/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
}
}
return $1
मैंने बहुत अच्छे टेर्डन के उत्तर को फंक्शन में संयोजित किया है, जो एक ही समय में शुरू होने के बाद से, और अंत तक के समय को प्रदर्शित करता है। वहाँ भी तीन वेरिएंट हैं इसलिए यह कॉल करना आसान है (आपको गणित को करने की ज़रूरत नहीं है), और यह भी सार है। उपयोग का उदाहरण :
{ ~ } » 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]}))
}
इसे लिनक्स टर्मिनल ( प्ले कमांड एमपी 3 या लिनक्स कमांड लाइन के माध्यम से फाइल करें ) या साइबरविन ( बाबुन / win7 में मेरे लिए काम करता है ) में ध्वनि बजाने के कुछ तरीके से मिलाएं और आपके पास अलार्म के साथ एक सरल लचीला टाइमर है !cat /path/foo.wav > /dev/dsp
एक और दृष्टिकोण
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
निशाचर था।
मैंने अपनी खुद की शेल स्क्रिप्ट लिखनी शुरू की: गीथब जिस्ट
#!/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
मुझे आश्चर्य है कि किसी ने sleepenh
अपनी स्क्रिप्ट में टूल का इस्तेमाल नहीं किया । इसके बजाय, प्रस्तावित समाधान या तो sleep 1
बाद के टाइमर आउटपुट या एक व्यस्त लूप के बीच का उपयोग करते हैं जो जितनी जल्दी हो सके उतना तेज़ आउटपुट देता है। पूर्व अपर्याप्त है क्योंकि मुद्रण करने में बहुत कम समय व्यतीत होने के कारण, उत्पादन वास्तव में प्रति सेकंड एक बार नहीं होगा, बल्कि उससे थोड़ा सा कम होगा जो कि उप-रूपी है। पर्याप्त समय बीतने के बाद, काउंटर एक सेकंड को छोड़ देगा। उत्तरार्द्ध अपर्याप्त है क्योंकि यह सीपीयू को बिना किसी अच्छे कारण के व्यस्त रखता है।
मेरे पास जो उपकरण है वह $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 सेकंड से कुछ अधिक समय लेगा, जो कि लूप को निष्पादित और पुनरावृत्त करने से आता है । यह त्रुटि धीरे-धीरे जमा होती है और समय के साथ हमारे स्टॉपवॉच टाइमर को अधिक से अधिक गति प्रदान करेगी। इस समस्या को ठीक करने के लिए, प्रत्येक लूप पुनरावृत्ति को सोने के लिए सटीक समय की गणना करनी चाहिए जो आमतौर पर एक सेकंड (एक सेकंड के अंतराल के लिए) से थोड़ा कम है। स्लीपेन टूल आपके लिए ऐसा करता है।
sleep 0.1
। क्या है sleepnh
(मैं आर्क रिपोस में इसे नहीं खोज सकता) और यह कैसे अलग है sleep
? जहाँ तक मैं बता सकता हूँ, आप मूल रूप से ऊपर मेरे जवाब के रूप में एक ही बात कर रहे हैं। मैं क्या खो रहा हूँ?
sleep 5
यह है कि आप वास्तव में 5 सेकंड के लिए नहीं सोती हैं। उदाहरण के लिए प्रयास करें time sleep 5
और आप देखते हैं कि कमांड को चलाने में 5 सेकंड से थोड़ा अधिक समय लगता है। समय के साथ त्रुटियां जमा होती जाती हैं। नींद की उपयोगिता त्रुटि के इस संचय से आसानी से बचने की अनुमति देती है।
sleepnh
बेहतर है sleep
(आप केवल अन्य उत्तर का उपयोग करते हैं- sleep 1
जो वे नहीं कहते हैं , केवल ओपी उस का उपयोग करता है) और ii) जहां इसे प्राप्त करना है और इसे कैसे स्थापित करना है क्योंकि यह एक मानक उपकरण नहीं है।
sleep
और sleepenh
पहले अनुच्छेद में। वैसे भी, मैं शायद उस पर पर्याप्त स्पष्ट नहीं था इसलिए मैंने उस पर अधिक विस्तार किया। मिलीसेकंड सटीकता समस्याएं sleep
एक बार कॉल करने पर आपको मिलती हैं । वे समय के साथ जमा होते हैं और कुछ बिंदु पर यह ध्यान देने योग्य है। मैंने यह नहीं कहा कि दूसरे केवल उपयोग करते हैं sleep 1
। मैंने कहा कि वे उपयोग करते हैं sleep 1
या एक व्यस्त। जो वे अब भी करते हैं। मुझे एक काउंटर उदाहरण दिखाएं। उत्तर जो करते sleep 0.1
हैं वही करते हैं sleep 1
सिवाय इसके कि वे त्रुटियों को और भी तेजी से जमा करते हैं।
संक्षिप्त जवाब:
for i in `seq 60 -1 1` ; do echo -ne "\r$i " ; sleep 1 ; done
स्पष्टीकरण:
मुझे पता है कि बहुत सारे उत्तर हैं, लेकिन मैं सिर्फ ओपी के प्रश्न के बहुत करीब से कुछ पोस्ट करना चाहता हूं, जिसे मैं व्यक्तिगत रूप से " टर्मिनल में ऑनलाइनर काउंटडाउन " के रूप में स्वीकार करूंगा । मेरे लक्ष्य थे:
यह काम किस प्रकार करता है:
seq
60 से 1 तक की संख्या।echo -ne "\r$i "
रिटर्न स्ट्रिंग की शुरुआत के लिए ध्यान रखता है और वर्तमान $i
मूल्य को प्रिंट करता है । अंतरिक्ष के बाद यह पिछले मूल्य को अधिलेखित करने के लिए आवश्यक है, अगर यह वर्तमान $i
(10 -> 9) के वर्णों से अधिक लंबा था ।आप एक कमांड लाइन स्टॉपवॉच की तलाश में OSX पर एक व्यक्ति हैं। बहाना करें कि आप ग्नू उपकरण स्थापित नहीं करना चाहते हैं और सिर्फ यूनिक्स के साथ चलना चाहते हैं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
}
बस यूटीसी समय में घड़ी + तारीख का उपयोग करें। तुम भी बड़े प्रदर्शन के लिए कुछ पैकेज स्थापित कर सकते हैं ...
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/ देखें
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
एक अजगर उदाहरण:
#!/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()
यह स्वीकृत उत्तर के समान है, लेकिन टेर्डन 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
(जहां t मिनट में समय है)।
एक कार्यशाला के लिए एक बड़े उलटी गिनती घड़ी प्रदर्शित करने के लिए एक शब्द आवेदन की तलाश में, आज पहले यह सवाल मिला। सुझावों में से कोई भी वैसा नहीं था जिसकी मुझे आवश्यकता थी, इसलिए मैंने जल्दी से एक और गो में एक साथ रखा: https://github.com/bnaucler/cdown
जैसा कि प्रश्न पहले से ही पर्याप्त रूप से उत्तर दिया गया है, इस बात को मरणोपरांत मानें।
$ नींद 1500 && xterm -fg पीले -g 240x80 और
जब पीले पाठ के साथ वह बड़ा टर्मिनल ऊपर उठता है, तो उठने और खिंचाव का समय!
नोट्स: - १५०० सेकंड = २५ मिनट पोमोडोरो - २४०x80 = टर्मिनल आकार २४० वर्ण पंक्ति, और rows० पंक्तियों के साथ। मेरे लिए एक स्क्रीन भर देता है।
श्रेय: http://www.linuxquestions.org/questions/linux-newbie-8/countdown-timer-for-linux-949463/
स्टॉपवॉच का एक जीयूआई संस्करण
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
यदि आप जो भी कारण के लिए एक संकलन-सक्षम कार्यक्रम चाहते हैं, वह निम्नलिखित कार्य करेगा:
#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;
}
इसका उपयोग अन्य कार्यक्रमों में भी किया जा सकता है और आसानी से पोर्ट किया जा सकता है, यदि कोई बैश वातावरण उपलब्ध नहीं है या आप एक संकलित प्रोग्राम का उपयोग करना पसंद करते हैं
.zshrc
आपके उत्तर पढ़ने के बाद इन अच्छे कार्यों को अपने अधिकार में जोड़ लिया । आज मैंनेcountdown
पहली बार उपयोग किया और उच्च CPU उपयोग पर ध्यान दिया। मैंने एक जोड़ाsleep 0.1
(मुझे नहीं पता कि एक फ्रैक्शनल सेकंड की नींद का समय सभी प्रणालियों पर समर्थित है) जिसने बहुत सुधार किया। दोष बेशक एक कम सटीक प्रदर्शन सटीकता है, लेकिन मैं अधिकतम के विचलन के साथ रह सकता हूं। 100ms।