Ich habe versucht, ein interaktives Programm in einem Bash-Skript zu haben:
my_program
Und ich möchte es mit 'Strg + c' schließen können. Aber wenn ich es mache, wird auch mein Skript geschlossen.
Ich weiss Bescheid.
trap '' 2
my_program
trap 2
Aber in diesem Fall kann ich einfach nicht my_program
mit Strg + c schließen.
Haben Sie eine Idee, wie Sie Strg + C in einem Programm zulassen, aber das Skript, in dem es ausgeführt wird, nicht schließen können?
BEARBEITEN: Beispiel hinzufügen
#!/bin/bash
my_program
my_program2
Wenn ich Strg + C zum Schließen benutze my_program
, my_program2
wird es nie ausgeführt, weil das gesamte Skript beendet wird.
tail
wenn Sie das nächste Mal s töten, anstatt Katzen zu töten?Sie können eine Trap auf ihre Standardeinstellung zurücksetzen, indem Sie den Befehl trap
-
als Aktionsargument angeben. Wenn Sie dies in einer Subshell tun, hat dies keine Auswirkungen auf die Falle in der übergeordneten Shell. In Ihrem Skript können Sie dies für jeden Befehl tun, den Sie mit Strg-C unterbrechen müssen:quelle
exec my_program
in der Subshell etwas effizienter sein.Wenn Sie Crtl+ verwenden C, unterbrechen Sie das Programm (" töten " Sie es).
Was Sie wahrscheinlich suchen, ist , Ihr Programm anzuhalten (" pausieren "). Hierfür können Sie Crtl+ verwenden Z.
Sobald Ihr Programm angehalten ist, können Sie es mit sehen
jobs
. Zum Beispiel:[1]+ Stopped ./foobar
Hier habe ich nur einen Job, Job Nr. 1, aber es kann mehr als einen geben - jeder Job hat seine eigene Nummer.
Sie können Sie suspendierte Prozess steuern , um eine Reihe von Befehlen, zum Beispiel
bg
,fg
undkill
.bg %1
Job # 1 in der wird neu gestartet b ack g Rundefg %1
wird erneut gestartet Job # 1 in f oreg round beendetkill %1
Job Nr. 1.Beachten Sie, dass Sie
bg
undfg
ohne Argumente verwenden können, wenn Sie nur einen aktiven Job haben.quelle