Ada perintah Unix bawaan repeat
yang argumen pertamanya adalah berapa kali mengulangi perintah, di mana perintah (dengan argumen apa pun) ditentukan oleh argumen yang tersisa untuk repeat
.
Misalnya,
% repeat 100 echo "I will not automate this punishment."
akan menggemakan string yang diberikan 100 kali dan kemudian berhenti.
Saya ingin perintah serupa – sebut saja forever
– yang bekerja dengan cara yang sama kecuali argumen pertama adalah jumlah detik untuk berhenti di antara pengulangan, dan itu berulang selamanya. Misalnya,
% forever 5 echo "This will get echoed every 5 seconds forever and ever."
Saya pikir saya akan bertanya apakah hal seperti itu ada sebelum saya menulisnya. Saya tahu ini seperti skrip Perl atau Python 2 baris, tetapi mungkin ada cara yang lebih standar untuk melakukan ini. Jika tidak, jangan ragu untuk memposting solusi dalam bahasa skrip favorit Anda.
PS:Mungkin cara yang lebih baik untuk melakukan ini adalah dengan menggeneralisasi repeat
untuk mengambil baik berapa kali pengulangan (dengan -1 berarti tak terhingga) dan jumlah detik untuk tidur di antara pengulangan.
Contoh di atas akan menjadi:
% repeat 100 0 echo "I will not automate this punishment."
% repeat -1 5 echo "This will get echoed every 5 seconds forever."
Jawaban yang Diterima:
Coba watch
perintah.
Usage: watch [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>]
[--no-title] [--version] <command>`
Sehingga:
watch -n1 command
akan menjalankan perintah setiap detik (baik, secara teknis, setiap satu detik ditambah waktu yang dibutuhkan untuk command
untuk dijalankan sebagai watch
(setidaknya procps
dan busybox
implementasi) hanya tidur satu detik di antara dua menjalankan command
), selamanya.
Apakah Anda ingin meneruskan perintah ke exec
bukannya sh -c
, gunakan -x
pilihan:
watch -n1 -x command
Di macOS, Anda bisa mendapatkan watch
dari Port Mac:
port install watch
Atau Anda bisa mendapatkannya dari Homebrew:
brew install watch