ubuntuusers.de

Bash: Mit control-c ein bestimmtes Skript beenden

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

wonderworld

Anmeldungsdatum:
7. März 2006

Beiträge: 195

Hallo, ich habe folgendes Problem:

Ich starte ein Bashscript (Script 1) in diesem rufe ich ein weiteres auf (Script 2). In Script 2 läuft eine Endlosschleife, die ich irgendwann beenden möchte.

Durch ein CTRL-C stoppen dann aber Script 1 und Script 2. Gibt es irgendeine Möglichkeit mit einem Keystroke nur Script2 zu beenden, so dass die Ausführung danach in Script 1 weitergeht?

Danke wonder

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Dürfte reichen, mittels trap im zweiten, inneren Skript das CTRL-C abzufangen. Hab's mal so gemacht, kann aber nicht garantieren, dass das 100% "korrekt" und der Königsweg ist. 😉

Aufrufendes Skript:

#!/bin/bash
# tt-call.sh

echo 'Spawning loop ...'
./tt.sh
echo 'Loop has ended. Doing something else.'
ls | grep OMG
echo 'Laeuft weiter.'

Inneres Skript:

#!/bin/bash
# tt.sh

trap 'exit' INT
while true; do
	echo -n '.'
	sleep 1
done

Lässt man das innere "trap" weg, beenden sich auf einen Schlag beide Skripte.

fuchsfuchsfuchs Team-Icon

Maskottchen
Avatar von fuchsfuchsfuchs

Anmeldungsdatum:
23. Juni 2008

Beiträge: 5649

Wohnort: Confoederatio Helvetica

Muss es zwangsweise Control+C sein?

Ich wuerde da einfach via kill ein bestimmtes Signal (SIGTERM oder SIGKILL) an das andere Skript senden ... Ansonsten muss wohl Trap herhalten, mit dem Du SIGINT (duerfte CTRL+C sein) abfaengst.

Ist es ueberhaupt noetig, dass das eine Skript das andere abwartet? Wenn ja gibt es dafuer wait, ansonsten kannst Du das erste Skript das zweite via job control im Hintergrund starten lassen.

Fuchs

wonderworld

(Themenstarter)

Anmeldungsdatum:
7. März 2006

Beiträge: 195

Hallo, Vains Lösung war genau was ich gebraucht habe, klappt prima, danke.

fuchs: Leider kann ich kein wait oder kill nehmen, da ich beim starten des scriptes noch nicht weiss, wie lange es laufen soll. es muss von mir selbst manuell stoppbar sein.

Gruss wonder

Antworten |