Terminal warnt beim Schließen, wenn es innerhalb eines Skripts geöffnet wird

Terminal warnt beim Schließen, wenn es innerhalb eines Skripts geöffnet wird

Zunächst die Frage: Wie kann ich den Benutzer warnen, dass ein Skript ausgeführt wird, wenn der Benutzer auf die Schaltfläche „Schließen“ klickt und das Terminal selbst (und der darin laufende Prozess) von der Befehlszeile aus gestartet wurde.

Ich habe ein Skript, das Aktionen ausführt, die der Benutzer rückgängig machen möchte, bevor das Skript beendet wird. Es gibt eine Leseanweisung, die den Vorgang anhält, bis der Benutzer [Eingabe] drückt. Ein unglückseliger Benutzer klickt jedoch gelegentlich auf die Schaltfläche „Schließen“ [x] in der oberen rechten Ecke. Ich habe keine Falle gefunden, die die Schaltfläche „Schließen“ abfängt, aber eine Warnung reicht aus. Das Gnome-Terminal bietet die erforderliche Warnung.

Aber, wenn das Gnome-Terminal von einem Skript aus gestartet wird (z. B. eine benutzerdefinierte Thunar-Aktion), funktioniert die Funktion nicht. Zur Verdeutlichung betrachten Sie das Skript:

gnome-terminal --command="sh readx.sh"

Wobei readx.sh eine einzelne Zeile enthält: read x

Wenn Sie auf die Schaltfläche [x] oben rechts klicken, wird ein auf diese Weise gestartetes Terminal ohne Warnung geschlossen, während das Skript noch aktiv ist.

Bei mir funktioniert jede Methode zum Einfangen oder Warnen.

Antwort1

Ja! Die Einbindung einer Zenity-Eingabeaufforderung funktioniert bei mir gut. Wenn das Skript mit nohup ausgeführt wird und eine Zenity-Eingabeaufforderung enthalten ist, wird der Thread wie gewünscht blockiert.

Antwort2

Sie können Ihren Prozess tatsächlich readx.shvom Terminalfenster trennen, sodass er auch dann im Hintergrund weiterläuft und seine Aufgabe zu Ende führt, wenn Sie das Gnome-Terminalfenster schließen. Dazu sollten Sie nohupden Befehl verwenden – er trennt den Prozess vom Terminal, leitet seine Ausgabe an nohup.out um und schirmt ihn ab vor SIGHUP.

Ich habe es mit dem folgenden Befehl getestet: gnome-terminal -e "nohup bash ./123.sh" Skript 123.shenthält nur sleep 7 && ls -a > 1.txt. Wenn ich also den vorherigen Befehl ausführe und das Fenster des Gnome-Terminals schließe, wird trotzdem die Datei 1.txt erstellt.

Antwort3

Ich habe diesen Befehl ausprobiert, um das Problem zu lösen.

Exec=mate-terminal -e "bash -i  -c 'ssh my.server';bash"

Dieser Befehl wird nur auf getestet mate-terminal, nicht auf gnome-terminal.

Meine mate-terminalVersion ist 1.16.3 auf CentOS7.

verwandte Informationen