Es kommt vor, dass tail
aufgrund von STRG + C stirbt, es wird jedoch auch an das übergeordnete Element (SINGINT) gesendet bash
. Da bash standardmäßig beim Empfang eines solchen Signals stirbt, müssen Sie das Standardverhalten von bash
when, wenn es empfangen wird, ersetzen .
Verwenden Sie den eingebauten Befehl trapbash(1)
, um dies zu ändern.
Das folgende Skript tailf-ctrl.sh
ist eine Demo und zeigt die Antwort:
#!/bin/bash function finish { echo "CTRL-C pressed!" } F=testfile echo hello > $F # set custom action trap finish SIGINT # comment this to see the problem tail -f $F # reset default action trap - SIGINT echo "Hello after" > after cat after
beachten Sie, dass:
- SIGINT ist das auf CTRL + C bezogene Signal
- erster Fall eine benutzerdefinierte Aktion installieren, um das Signal SIGINT bezogen
- Der zweite Trap setzt das Standardverhalten des SIGINT-Signals zurück
Ausgabe des Skripts ist:
$ bash tailf-ctrl.sh hello ^CCTRL-C pressed! Hello after
Das zeigt, dass die zweite Datei so geschrieben ist, dass das Ende des Skripts erreicht ist, wenn tail
dies aufgrund der CTRL-C
.
Wenn Sie den ersten Trap-Befehl auskommentieren, wird Ihr Problem angezeigt: bash wird sofort beendet und die Ausgabe sollte folgendermaßen aussehen:
$ bash tailf-ctrl.sh hello ^C $