Saya mencoba mencari cara sederhana untuk terus menjalankan kembali perintah kapan pun selesai, karena alasan apa pun (kesalahan atau lainnya).
Apa cara terbaik untuk mendekati ini?
EDIT: Saya belum cukup jelas sebelumnya. Saya perlu eksekusi berikutnya untuk menunggu sampai yang sebelumnya selesai.
EDIT 2: Hampir semua jawaban berfungsi dengan baik. Saya keliru mengira sebagian besar jawaban akan memotong proses atau menjalankannya sekali saja, tidak ada yang diinginkan.
Jawaban:
Ini menciptakan loop tak terbatas, mengeksekusi
command
berulang-ulang.sumber
while true; do echo 'Hit CTRL+C'; sleep 1; done
The
watch
perintah akan mengulangi perintah selamanya dengan interval tertentu:Pengaturan
-n
ke nol secara efektif membuat interval tidak terjadi apa-apa (saya pikir ini benar-benar 0,1 detik).watch
juga memiliki manfaat tambahan untuk menyelaraskan output sehingga perubahan visual dapat dilihat dengan mudah, dan memiliki saklar untuk menyoroti perubahan dari proses terakhir.Referensi: halaman manual arloji :
sumber
watch ls
di direktori yang berisi file, Anda tidak mendapatkan apa-apa?Solusi sederhana adalah:
;
memisahkan perintah, memungkinkan untuk beberapa perintah dalam satu baris ( Bash: Daftar )!#
memberitahu bash untuk "ulangi semua yang telah saya tulis sejauh ini di baris ini" ( Bash: Event-Designators )sumber
yourcommand; !!
tidak benar-benar bekerja dengan perintah pada baris yang sama, bagaimanapun,!#
sepertinya berhasil. Tepuk tangan!; !#
tidak bekerja pada ZSH, itu hanya memperluas pernyataan yang pada dasarnya mengkloningnya, itu tidak memicunyaAnda dapat merencanakan sebelumnya selama eksekusi perintah (asalkan tidak interaktif) dan masukkan
!!
yang akan mengeksekusi perintah sebelumnya lagi. Ini berfungsi misalnya selamaping -c 5
.Anda juga dapat mendefinisikan suatu fungsi di
bash
:Untuk bertahan, simpan di
~/.bashrc
.Kemudian, Anda dapat menjalankan perintah Anda seperti ini:
Jika itu perintah khusus yang ingin Anda jalankan berulang kali (dan bukan mis. Perintah apa pun ), Anda dapat mengganti
"$@"
potongan itu dengan perintah Anda yang sebenarnya, dan beri nama fungsi misrepeat_ping
.Untuk membuatnya menjadi infinite loop, Anda dapat melakukan apa yang disarankan @Dennis. Saya sarankan Anda menambahkan periode menunggu jika Anda ingin menggunakan ini dalam shell interaktif, seperti ini:
Kalau tidak, agak tidak nyaman untuk membatalkan loop tak terbatas ini menggunakan
Ctrl-Z
.sumber
Berikan
while
loop kondisi boolean seperti berikut:Ini akan dieksekusi berulang-ulang sampai bash menerima sinyal untuk menghentikan proses. Biasanya dalam bentuk
ctrl+c
.Anda juga dapat menggunakan
watch
perintah untuk menjalankan skrip berulang kali. Misalnya, jam sederhana di terminal bash Andawatch
dapat terlihat seperti:The
-t
pilihan mengatakanwatch
untuk tidak menampilkan judul dari proses sedang berjalan. Ini memberi Anda hasil bersih hanya dari perintah yang sedang diulang. The-n1
pilihan memberitahu menonton untuk mengulang setiapn
detik. Dalam hal ini,-n1
akan menjadi interval1
detik. Kemudiandate +%T
perintah tersebut menunjukkan waktu pada saat penyelesaian perintah. Melakukan perintah ini akan memberi Anda jam aktif di terminal Anda.Dan kemudian satu lagi metode yang tidak ada dalam jawaban lain akan menjadi panggilan fungsi yang tak terbatas.
Ini pada dasarnya sama dengan
while
loop boolean hanya menggunakan panggilan fungsi rekursif.(sunting) Untuk menjaga sumber daya mesin Anda dalam pikiran, saya telah menambahkan
&& wait
sehingga setiap kali proses dijalankan, loop akan "menunggu" sampai proses itu selesai dengan status keluar 0 sebelum iterasi berikutnya. Ini berguna dalam skrip shell interaktif.sumber
while
contoh loop tetapi tidak menggunakantrue
sintaks boolean . Adawatch
contoh tetapi tidak memberikan banyak sintaks yang berguna. Saya menguraikan ini untuk siapa pun itu dapat membantu. Saya ingin memberikan manfaat praktis untuk ini. Thewhile
Loop boolean juga bisafalse
dan tidak mengeksekusi sampai kondisi benar terpenuhi. Ini sangat berguna.if
terus menjalankan kembali?if
pernyataan.Ini adalah metode lain yang saya gunakan untuk mengulangi perintah dalam bash. Ini mungkin terdengar konyol bagi sebagian orang karena tidak melibatkan penulisan naskah dan mungkin diketahui banyak orang. Tapi saya pikir ini layak disebut karena cepat dan ramah-pemula, dalam arti tidak ada banyak sintaks yang perlu diingat. Saya hanya menguji ini di gnome-terminal Ubuntu dan terminal lain mungkin tidak mendukung ini.
Anda tidak perlu menunggu untuk menempelkan sampai setiap perintah selesai. Perintah yang disisipkan masuk ke antrian dan mereka mengeksekusi satu demi satu.
sumber
Saya merasa cakep hari ini.
Baca dari salah satu aliran tanpa batas dan salurkan ke
xargs
Jika Anda perlu sedikit istirahat di sana, kemungkinan besar Anda perlu mengeksekusi
sh
sumber