Saya mengalami masalah dengan kombinasi titik koma dan / atau kawat gigi yang tepat. Saya ingin melakukan ini, tetapi sebagai one-liner dari baris perintah:
while [ 1 ]
do
foo
sleep 2
done
bash
loops
while-loop
Brian Deacon
sumber
sumber
Jawaban:
Ngomong-ngomong, jika Anda mengetiknya sebagai multiline (seperti yang Anda tunjukkan) di command prompt dan kemudian memanggil histori dengan panah ke atas, Anda akan mendapatkannya di satu baris, diselingi dengan benar.
sumber
cmdhist
opsi jika Anda menggunakan bash?while true; do sh /Users/myuser/bin/vpn ; done
Juga dimungkinkan untuk menggunakan perintah tidur dalam kondisi sementara. Membuat one-liner tampak lebih bersih.
sumber
while echo thinking ; do sleep 2 ; done
Tentu saja jika perintah [while] gagal, loop keluar, jadi Anda haruswhile echo thinking || true ; do sleep 2 ; done
tetapi kemudian Anda kembali kewhile true ; ...
Usus selalu "benar":
sumber
: [arguments]
Tidak ada efek; perintah tidak melakukan apa-apa selain memperluas argumen dan melakukan pengalihan tertentu. Kode keluar nol dikembalikan.Anda dapat menggunakan titik koma untuk memisahkan pernyataan:
sumber
Anda juga dapat menggunakan
until
perintah:Perhatikan bahwa berbeda dengan
while
,until
akan menjalankan perintah di dalam loop selama kondisi tes memiliki status keluar yang tidak nol.Menggunakan
while
loop:Menggunakan
for
loop:Cara lain menggunakan
until
:sumber
until ((0)); do foo; sleep 2; done
tampaknya tidak bekerja. Itu terus menerus tanpa batas.Loop tak terbatas yang sangat sederhana .. :)
Dari pertanyaan Anda:
sumber
Saya suka menggunakan titik koma hanya untuk pernyataan WHILE, dan operator && untuk membuat loop melakukan lebih dari satu hal ...
Jadi saya selalu melakukannya seperti ini
sumber
&&
dalam loop adalah sama seperti waktu lainnya sebenarnya bukan. Apakah Anda perlu hal kedua terjadi hanya jika yang pertama terjadi, kemudian gunakan yang&&
lain;
cukup. Sungguh, Anda ingin menjaga isi loop itu pendek dan sederhana, idealnya hanya satu perintah, jadi fungsi atau skrip.Untuk proses menonton sederhana gunakan
watch
sajasumber
Menggunakan
while
:Menggunakan
for
Loop:Menggunakan
Recursion
, (sedikit berbeda dari di atas, interupsi keyboard tidak akan menghentikannya)sumber
Jika Anda ingin loop sementara berhenti setelah beberapa kondisi, dan
foo
perintah Anda mengembalikan non-nol ketika kondisi ini terpenuhi maka Anda bisa mendapatkan loop untuk istirahat seperti ini:Misalnya, jika
foo
perintahnya menghapus hal-hal dalam batch, dan mengembalikan 1 ketika tidak ada yang tersisa untuk dihapus.Ini berfungsi dengan baik jika Anda memiliki skrip khusus yang perlu menjalankan perintah berkali-kali hingga beberapa syarat. Anda menulis skrip untuk keluar
1
saat kondisi terpenuhi dan keluar0
saat harus dijalankan kembali.Misalnya, Anda memiliki skrip python
batch_update.py
yang memperbarui 100 baris dalam database dan mengembalikan0
jika ada lebih banyak untuk memperbarui dan1
jika tidak ada lagi. Perintah berikut akan memungkinkan Anda untuk memperbarui baris 100 sekaligus dengan tidur selama 5 detik antara pembaruan:sumber
foo
perintah keluar dengan kode1
saat Anda ingin loop sementara terputus. Saya telah memperbarui jawaban saya dengan sebuah contoh.Jika saya bisa memberikan dua contoh praktis (dengan sedikit "emosi").
Ini menulis nama semua file yang diakhiri dengan ".jpg" di folder "img":
Ini menghapus mereka:
Hanya berusaha berkontribusi.
sumber
ls -1 *.jpg
danrm *.jpg
Anda dapat mencoba ini juga PERINGATAN: ini sebaiknya tidak Anda lakukan tetapi karena pertanyaannya adalah meminta infinite loop tanpa akhir ... ini adalah bagaimana Anda dapat melakukannya.
sumber