2012-10-07 28 views
16

Ben okuma kullanarak bir komut dosyası içindeki komutları çalıştırmak için çalışıyorum ve kullanıcı Ctrl + C kullandığında, ben komuta yürütülmesini durdurmak istiyor ama çıkmak değil senaryo. Böyle şey:BASH - kullanarak tuzak ctrl + c

#!/bin/bash 

input=$1 
while [ "$input" != finish ] 
do 
    read -t 10 input 
    trap 'continue' 2 
    bash -c "$input" 
done 
unset input 

kullanıcı Ctrl + C kullanır, ben girdi okuyan ve diğer komutlar çalıştırarak devam etmek istiyorum. sorun olduğunu ben gibi bir komut kullanırken:

while (true) do echo "Hello!"; done; 

Ben Ctrl + C bir kez yazdıktan sonra O çalışmıyor, ama ben birkaç kez yazın kez çalışır. Farklı bir süreç grubundaki komutu çalıştırmak için gereken

#!/bin/bash 
# type "finish" to exit 

# function called by trap 
other_commands() { 
    printf "\rSIGINT caught  " 
    sleep 1 
    printf "\rType a command >>> " 
} 

trap 'other_commands' SIGINT 

input="[email protected]" 

while true; do 
    printf "\rType a command >>> " 
    read input 
    [[ $input == finish ]] && break 
    bash -c "$input" 
done 
+2

'tuzak deneyin 'break' 2 'yerine –

cevap

8

aşağıdaki kodu deneyin

#!/bin/bash 

# Enable job control 
set -m 

while : 
do 
    read -t 10 -p "input> " input 
    [[ $input == finish ]] && break 

    # set SIGINT to default action 
    trap - SIGINT 

    # Run the command in background 
    bash -c "$input" & 

    # Set our signal mask to ignore SIGINT 
    trap "" SIGINT 

    # Move the command back-into foreground 
    fg %- 

done 
+0

Düzenleme bölümüne bakın, test artık döngü içinde. –

+0

Hala bir ctrl + C için çalışmıyor, yazdırmayı durdurmak için 3 veya 4 kez yazmak zorundayım Merhaba –

+1

Seni anlamıyorum, 'ctrl + C 'istediğin gibi kapana kısılmış. Bırakmak yerine, STDOUT'da bazı dizeleri basar. –

10

ve bu yapmanın kolay yolu iş denetimini kullanmaktır::