Bagaimana saya bisa menampilkan penghitung waktu mundur real-time di terminal Linux? Apakah ada aplikasi yang ada atau, bahkan lebih baik, satu liner untuk melakukan ini?
sumber
Bagaimana saya bisa menampilkan penghitung waktu mundur real-time di terminal Linux? Apakah ada aplikasi yang ada atau, bahkan lebih baik, satu liner untuk melakukan ini?
Saya tidak yakin mengapa Anda perlu beep
, jika yang Anda inginkan adalah stopwatch, Anda dapat melakukan ini:
while true; do echo -ne "`date`\r"; done
Itu akan menunjukkan kepada Anda detik berlalu secara realtime dan Anda dapat menghentikannya dengan Ctrl+ C. Jika Anda membutuhkan ketelitian yang lebih besar, Anda bisa menggunakan ini untuk memberi Anda nanodetik:
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Akhirnya, jika Anda benar-benar ingin "format stopwatch", di mana semuanya dimulai pada 0 dan mulai tumbuh, Anda bisa melakukan sesuatu seperti ini:
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done
Untuk penghitung waktu mundur (yang tidak ditanyakan oleh pertanyaan awal Anda), Anda dapat melakukan ini (ubah sesuai detik):
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
Anda bisa menggabungkan ini menjadi perintah-perintah sederhana dengan menggunakan fungsi bash (atau shell mana saja yang Anda inginkan). Dalam bash, tambahkan baris-baris ini ke Anda ~/.bashrc
(itu sleep 0.1
akan membuat sistem menunggu 1/10 detik antara setiap kali dijalankan sehingga Anda tidak melakukan spam pada CPU Anda):
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
}
Anda kemudian dapat memulai penghitung waktu mundur satu menit dengan menjalankan:
countdown 60
Anda dapat menghitung mundur dua jam dengan:
countdown $((2*60*60))
atau sepanjang hari menggunakan:
countdown $((24*60*60))
Dan mulai stopwatch dengan menjalankan:
stopwatch
Jika Anda harus dapat berhadapan dengan hari dan juga jam, menit dan detik, Anda dapat melakukan sesuatu seperti ini:
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
}
Perhatikan bahwa stopwatch
fungsi belum diuji selama berhari-hari karena saya tidak benar-benar ingin menunggu 24 jam untuk itu. Itu harus bekerja tetapi tolong beri tahu saya jika tidak.
.zshrc
kanan saya setelah saya membaca jawaban Anda. Hari ini saya menggunakancountdown
pertama kalinya dan melihat penggunaan CPU yang agak tinggi. Saya menambahkansleep 0.1
(Saya tidak tahu apakah waktu tidur sepersekian detik didukung pada semua sistem) yang meningkat banyak. Kekurangannya tentu saja adalah akurasi tampilan yang kurang akurat, tetapi saya bisa hidup dengan penyimpangan max. 100 ms.bash
, saya bisa hidup dengan itu (meskipun itu adalah lebih tinggi dari yang saya harapkan dan saya juga telah menambahkan tidur untuk .bashrc saya sendiri).date +%s
- $ date1)) +% H:% M:% S) ";echo -ne "$(date -ju -f %s $(($date1 -
date +% s)) +%H:%M:%S)\r"
;play -q -n synth 2 pluck C5
.Cara favorit saya adalah:
Mulai:
Berhenti:
Seperti yang dikomentari @wjandrea di bawah ini, versi lain akan dijalankan:
dan tekan
Enter
untuk berhentisumber
time read
time read
gagal di zsh, tetapitime (read)
berfungsi.Saya mencari hal yang sama dan akhirnya menulis sesuatu yang lebih rumit dengan Python:
Ini akan memberi Anda hitungan mundur 10 detik sederhana:
Sumber: https://github.com/trehn/termdown
sumber
Saya sudah menggunakan yang ini:
Contoh:
Ini sumbernya .
sumber
atur timer selama 15 menit
sunting: Saya memiliki banyak tautan terbuka, dan saya pikir ini khusus untuk osx, maaf soal itu. Meninggalkan jawaban saya sehingga orang lain sadar akan cuti pada BSD.
sumber
Ini untuk stopwatch dengan seperseratus detik:
Contoh
sumber
return $1
Saya telah menggabungkan jawaban terdon yang sangat bagus, ke dalam fungsi yang pada saat yang sama menampilkan waktu sejak awal, dan waktu sampai akhir. Ada juga tiga varian sehingga lebih mudah untuk dipanggil (Anda tidak harus melakukan bash matematika), dan itu juga diabstraksikan. Contoh penggunaan :
Dan sesuatu seperti timer kerja:
Dan jika Anda membutuhkan waktu yang sangat spesifik:
Berikut kode untuk dimasukkan ke .bashrc Anda
Kombinasikan ini dengan beberapa cara memutar suara di terminal linux ( memutar file mp3 atau wav melalui baris perintah Linux ) atau cygwin (
cat /path/foo.wav > /dev/dsp
berfungsi untuk saya di babun / win7) dan Anda memiliki timer fleksibel sederhana dengan alarm !sumber
Pendekatan lain
Untuk Mac:
Jika seseorang menginginkan sinyal ketika mencapai nol, misalnya ia dapat membangunnya dengan perintah yang mengembalikan status keluar bukan nol pada nol dan menggabungkannya dengan
watch -b
, atau sesuatu, tetapi jika seseorang ingin membangun skrip yang lebih rumit, ini mungkin bukan cara untuk pergi; ini lebih merupakan solusi tipe "cepat dan kotor".Saya suka
watch
programnya secara umum. Saya pertama kali melihatnya setelah saya menuliswhile sleep 5; do
loop yang tak terhitung jumlahnya untuk efek yang berbeda.watch
ternyata lebih bagus.sumber
Saya akhirnya menulis skrip shell saya sendiri: github gist
sumber
Saya terkejut bahwa tidak ada yang menggunakan
sleepenh
alat dalam skrip mereka. Alih-alih, solusi yang diusulkan baik menggunakansleep 1
antara output timer berikutnya atau loop sibuk yang output secepat mungkin. Yang pertama tidak memadai karena karena sedikit waktu yang dihabiskan untuk melakukan pencetakan, output tidak akan benar-benar terjadi sekali per detik tetapi sedikit kurang dari apa yang suboptimal. Setelah waktu yang cukup berlalu, penghitung akan melewati satu detik. Yang terakhir tidak memadai karena membuat CPU sibuk tanpa alasan.Alat yang saya miliki dalam
$PATH
penampilan saya seperti ini:Skrip dapat digunakan sebagai stop watch (menghitung hingga terputus) atau sebagai penghitung waktu yang beroperasi untuk waktu yang ditentukan. Karena
sleep
perintah ini digunakan, skrip ini memungkinkan untuk menentukan durasi untuk menghitung dalam ketepatan yang sama seperti yang Andasleep
izinkan. Pada Debian dan turunannya, ini termasuk tidur sub-detik dan cara yang dapat dibaca manusia untuk menentukan waktu. Jadi misalnya Anda bisa mengatakan:Dan seperti yang Anda lihat, perintah berjalan tepat selama 2 menit dan 4,6 detik tanpa banyak keajaiban dalam skrip itu sendiri.
EDIT :
Alat sleepenh berasal dari paket dengan nama yang sama di Debian dan turunannya seperti Ubuntu. Untuk distribusi yang tidak memilikinya, ia berasal dari https://github.com/nsc-deb/sleepenh
Keuntungan dari sleepenh adalah, ia dapat memperhitungkan penundaan kecil yang terakumulasi dari waktu ke waktu dari pemrosesan hal-hal lain selain tidur selama satu putaran. Bahkan jika seseorang hanya
sleep 1
dalam satu loop 10 kali, eksekusi keseluruhan akan memakan waktu lebih dari 10 detik karena overhead kecil yang berasal dari mengeksekusisleep
dan mengulangi loop. Kesalahan ini perlahan terakumulasi dan seiring waktu akan membuat penghitung waktu stopwatch kami semakin tidak tepat. Untuk memperbaiki masalah ini, setiap iterasi harus menghitung waktu tidur yang tepat yang biasanya sedikit kurang dari satu detik (untuk timer interval satu detik). Alat sleepenh melakukan ini untuk Anda.sumber
sleep 0.1
. Apa itusleepnh
(saya tidak dapat menemukannya di repo Arch) dan bagaimana bedanyasleep
? Sejauh yang saya tahu, pada dasarnya Anda melakukan hal yang sama dengan jawaban saya di atas. Apa yang saya lewatkan?sleep 5
adalah, bahwa Anda tidak tidur selama 5 detik. Coba misalnyatime sleep 5
dan Anda melihat menjalankan perintah membutuhkan waktu sedikit lebih dari 5 detik. Seiring waktu kesalahan menumpuk. Utilitas sleepenh memungkinkan untuk dengan mudah menghindari akumulasi kesalahan ini.sleepnh
lebih baik daripadasleep
(Anda hanya mengatakan jawaban lain menggunakansleep 1
— yang tidak , hanya OP yang menggunakannya) dan ii) di mana mendapatkannya dan cara menginstalnya karena itu bukan alat standar.sleep
dansleepenh
di paragraf pertama. Ngomong-ngomong, saya mungkin tidak cukup jelas tentang hal itu jadi saya lebih banyak mengembangkannya di bagian akhir. Masalah akurasi milidetik adalah apa yang Anda dapatkan saat meneleponsleep
sekali. Mereka menumpuk dari waktu ke waktu dan pada titik tertentu terlihat. Saya tidak mengatakan bahwa orang lain hanya menggunakansleep 1
. Saya mengatakan bahwa mereka menggunakansleep 1
atau kesibukan. Yang masih mereka lakukan. Tunjukkan saya contoh balasan. Jawaban yang dilakukansleep 0.1
sama dengan yang dilakukansleep 1
kecuali bahwa mereka mengakumulasi kesalahan lebih cepat.Jawaban singkat:
Penjelasan:
Saya tahu ada banyak jawaban, tetapi saya hanya ingin memposting sesuatu yang sangat dekat dengan pertanyaan OP, yang secara pribadi saya akan menerima sebagai " penghitung oneliner di terminal ". Tujuan saya adalah:
Bagaimana itu bekerja:
seq
mencetak angka dari 60 hingga 1.echo -ne "\r$i "
mengembalikan tanda sisipan ke awal string dan mencetak$i
nilai saat ini . Spasi setelah itu diperlukan untuk menimpa nilai sebelumnya, jika lebih panjang berdasarkan karakter daripada saat ini$i
(10 -> 9).sumber
Untuk referensi di masa mendatang, ada alat baris perintah yang disebut µTimer dengan opsi baris perintah yang sangat mudah untuk penghitung waktu mundur / hitung mundur.
sumber
Berpura-puralah Anda orang di OSX mencari stopwatch baris perintah. Berpura-puralah bahwa Anda tidak ingin menginstal alat gnu dan hanya ingin menjalankan dengan unix
date
dalam hal ini lakukan seperti yang dikatakan @terdon tetapi dengan modifikasi ini:
sumber
Cukup gunakan tanggal + jam dalam waktu UTC. Anda juga dapat menginstal beberapa paket untuk tampilan besar ...
Cobalah!
Lihat juga http://www.cyberciti.biz/faq/create-large-colorful-text-banner-on-screen/
sumber
sw adalah stopwatch sederhana yang akan berjalan selamanya.
Pasang
Pemakaian
sumber
Contoh python:
sumber
Lihatlah TermTime , ini adalah jam dan stopwatch berbasis terminal yang bagus:
pip install termtime
sumber
Ini mirip dengan jawaban yang diterima, tetapi terdon
countdown()
memberi saya kesalahan sintaks. Yang ini sangat bagus untuk saya, meskipun: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!"; }
Anda dapat memasukkannya ke dalam
.bashrc
dan kemudian jalankan dengan:timer t
(di mana t adalah waktu dalam menit).sumber
Temukan pertanyaan ini sebelumnya hari ini, ketika mencari aplikasi istilah untuk menampilkan penghitung waktu mundur yang besar untuk sebuah lokakarya. Tidak ada saran yang persis apa yang saya butuhkan, jadi saya segera memasukkan satu lagi di Go: https://github.com/bnaucler/cdown
Karena pertanyaannya sudah dijawab dengan cukup, anggap ini demi anak cucu.
sumber
$ sleep 1500 && xterm -fg yellow -g 240x80 &
Ketika terminal besar dengan teks kuning itu melompat, saatnya bangun dan meregang!
Catatan: - 1500 detik = 25 menit pomodoro - 240x80 = ukuran terminal dengan 240 karakter baris, dan 80 baris. Mengisi layar untuk saya secara nyata.
Kredit: http://www.linuxquestions.org/questions/linux-newbie-8/countdown-timer-for-linux-949463/
sumber
Versi GUI dari stopwatch
sumber
Jika Anda menginginkan program yang dapat dikompilasi dengan alasan apa pun, berikut ini akan berfungsi:
Ini dapat digunakan dalam program lain juga dan mudah dipindahkan, jika lingkungan bash tidak tersedia atau Anda lebih suka menggunakan program yang dikompilasi
github
sumber