Saya sedang menyusun beberapa direktori. Saya memiliki terminal bash yang terbuka dan menjalankan sesuatu seperti ini:
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
Namun jika saya ingin menghentikan semuanya, saya tekan Control-C. Itu menghentikan rsync, tetapi kemudian melanjutkan ke yang berikutnya. Dalam hal ini saya menyadari apa yang telah terjadi dan kemudian tekan Control-C seperti orang gila sampai semuanya bekerja lagi.
Apakah ada cara untuk 'memperbaiki' ini. Saya menginginkannya jadi jika saya memiliki loop seperti itu, dan tekan Control-C, itu akan mengembalikan saya ke bash shell saya.
Jawaban:
Ini juga akan keluar dari loop jika menjalankan rsync individu gagal karena beberapa alasan.
sumber
break 2
(atau ganti "2" dengan jumlah loop bersarang yang ingin Anda hentikan).Untuk memperluas jawaban Dennis, kode Anda mungkin terlihat seperti:
Untuk contoh yang berfungsi (yang melibatkan rsync), lihat http://gist.github.com/279849 .
sumber
Anda dapat mengatur jebakan untuk Control-C.
akan mengeksekusi
command
ketika Control-C ditekan. Cukup letakkantrap
pernyataan di suatu tempat di naskah Anda pada titik di mana Anda ingin menjadi efektif.sumber
Ctrl-Z
untuk menangguhkan skrip;kill %%
Kredit, penjelasan, dan detail lainnya dalam jawaban ini .
sumber
Saat Anda meletakkan string perintah di dalam tanda kurung, string akan bertindak sebagai satu proses, dan akan menerima SIGINT dan berakhir ketika Anda menekan Ctrl- C:
Tapi! Dalam kasus
rsync
perintah, ini memungkinkan banyak sumber, sehingga kode yang Anda tulis akan lebih baik ditulis sebagai:sumber
Saya cenderung untuk menempatkan perintah lain di loop saya yang dapat dengan mudah terganggu. Ini membutuhkan dua ctrl-C untuk ditekan.
Ini bukan solusi yang bagus untuk rsync ini, yang mungkin ingin Anda jalankan dengan cepat. Tapi itu bekerja dengan baik untuk loop lain, seperti ini:
Loop ini akan mencari kembali alamat example.com setiap kali melalui loop, yang berguna jika Anda melihat perubahan DNS.
sumber