2015-08-21 14 views
7

sadece şimdiki aşağıdaki gibidir:tüm senaryoyu durdurmak için Ctrl + C nasıl kullanılır değil ben gibi bir senaryomuz var komut

for ((i=0; i < $srccount; i++)); do 
    echo -e "\"${src[$i]}\" will be synchronized to \"${dest[$i]}\"" 
    echo -e $'Press any key to continue or Ctrl+C to exit...\n' 
    read -rs -n1 
    rsync ${opt1} ${opt2} ${opt3} ${src[$i]} ${dest[$i]} 
done 

Ben komut okumak cevaben Ctrl + C basarsanız, bütün komut dosyası duracak, ancak komutunu çalıştıran Ctrl Ctrl C komutunu çalıştırırsanız, geçerli rsync komutu duracak ve komut için döngü devam edecektir.

kullanıcı Ctrl çalıştığırsync iken + C komut kendisinden rsync ve çıkış durdurmak basıldığında eğer senaryoyu anlatmak için herhangi bir yolu var mı?

+0

'opt1',' opt2', 'opt3',' srccount', 'src' ve' dest' komut dosyasının önceki satırında tanımlanmıştır. –

+4

'trap" çıkış "INT'. Bkz. Http://unix.stackexchange.com/a/48432/50240 – bishop

+0

@bishop Teşekkürler, işe yaradı. Lütfen cevap olarak yazın, kabul edebilirim. –

cevap

7

Ctrl + SIGINT, kesme sinyalini gönderir.

trap "exit" INT 
for ((i=0; i < $srccount; i++)); do 
    echo -e "\"${src[$i]}\" will be synchronized to \"${dest[$i]}\"" 
    echo -e $'Press any key to continue or Ctrl+C to exit...\n' 
    read -rs -n1 
    rsync ${opt1} ${opt2} ${opt3} ${src[$i]} ${dest[$i]} 
done 

sadece bir sinyal aldıktan sonra çıkarken çok daha fazlasını yapabilir: Bunu trap yerleşik aracılığıyla, bu sinyali aldığında çıkmak için bash anlatmalıyız. Genellikle, geçici dosyaları temizleme sinyal işleyicilerinde yapılır. Daha fazla ayrıntı için bash documentation'a bakın.

İlgili konular