J'ai essayé d'avoir un programme interactif dans un script bash:
my_program
Et je souhaite pouvoir le fermer avec 'Ctrl + c'. Mais quand je le fais, mon script se ferme également.
Je sais.
trap '' 2
my_program
trap 2
Mais dans ce cas, je ne peux pas fermer my_program
avec Ctrl + c.
Avez-vous une idée de comment autoriser Ctrl + c sur un programme, sans fermer le script qui l'exécute?
EDIT: ajouter un exemple
#!/bin/bash
my_program
my_program2
Si j'utilise Ctrl + c pour fermer my_program
, il my_program2
n'est jamais exécuté car le script entier est fermé.
tail
s au lieu de tuer des chats la prochaine fois?Vous pouvez réinitialiser un trap à sa valeur par défaut en donnant la commande trap
-
comme argument d'action. Si vous le faites dans un sous - shell , cela n'affectera pas le piège dans le shell parent. Dans votre script, vous pouvez le faire pour chaque commande dont vous avez besoin pour être interruptible avec Ctrl-C:la source
exec my_program
dans le sous-shell, être légèrement plus efficace.Lorsque vous utilisez Crtl+ C, vous interrompez le programme ("le tuez ").
Ce que vous cherchez probablement, c'est de suspendre votre programme (" pause "). Pour cela, vous pouvez utiliser Crtl+ Z.
Une fois votre programme en pause, vous pouvez le voir en utilisant
jobs
. Par exemple:[1]+ Stopped ./foobar
Ici, je n'ai qu'un seul travail, le travail n ° 1, mais il peut y en avoir plusieurs - chaque travail a son propre numéro.
Vous pouvez contrôler votre processus suspendu à l'aide d'un certain nombre de commandes, par exemple
bg
,fg
etkill
.bg %1
redémarrera le travail n ° 1 dans le cycle b ack gfg %1
redémarrera le travail n ° 1 dans le f oreg roundkill %1
tuera le travail # 1Notez que vous pouvez utiliser
bg
etfg
sans argument si vous n'avez qu'un seul travail actif.la source