2014-07-19 4 views
1

Je suis très novice en matière de script shell et j'ai besoin d'aide pour cela.script shell - terminer l'itération avant de quitter la boucle infinie

Je voudrais exécuter certaines commandes avec boucle infinie et je veux que la boucle soit terminée sur ctrl-c est pressé, mais avant de terminer Je veux que l'itération courante soit terminée (signifie que toutes les instructions dans la boucle doivent être exécutées .

infinite-loop (
    command 1; 
    command 2; 
    command 3; 
loop-ends 

ainsi de suite ctrl-c à tout moment en cours d'exécution, les 3 commandes doivent être exécutées avant que les boucles est terminée. boucles devraient continuer à exécuter si ctrl-c est pas pressé.

toute suggestion s'il vous plaît ??

Répondre

1

Lik e ce (non testé)

#!/bin/bash 
trap "DONE=1" SIGINT 
DONE=0 
while [ $DONE -eq 0 ] 
do 
    process1 
    process2 
    process3 
done 
3

Vous pouvez utiliser trap pour piéger le signal SIGINT. (testé)

#!/bin/sh 

trap ctrl_c INT 

ctrl_c() { 
    RUNNING=0 
} 

RUNNING=1 

while [ "$RUNNING" = 1 ]; do 
    echo 'working' 
    sleep 1 
    echo 'on something else' 
    sleep 1 
    echo 'done' 
done