Öffnen Sie ein Terminalfenster und führen Sie den Befehl aus. Schließen Sie dann das Terminalfenster, wenn der Befehl erfolgreich ausgeführt wurde.

3299
Caspar

Ich versuche ein Skript zu schreiben, um Folgendes zu tun:

  1. Öffnen Sie ein Terminalfenster, das einen lang laufenden Befehl ausführt
  2. Bewegen Sie (idealerweise) das Terminalfenster mit xdotool in die obere linke Ecke des Bildschirms
  3. Schließen Sie das Terminalfenster nur, wenn der Befehl für die Langzeitoperation mit einem Rückkehrcode von Null beendet wurde

Um es in Windows auszudrücken: Ich hätte gerne das Linux-Äquivalent von, start cmd /c long_running_cmdfalls long_running_cmderfolgreich, und das Gleiche tun, start cmd /k long_running_cmdwenn es fehlschlägt.

Was ich bisher habe, ist ein Skript, das xterm mit einem gegebenen Befehl startet und das Fenster dann wie gewünscht verschiebt:

#!/bin/bash  # open a new terminal window in the background with the long running command xterm -e ~/bin/launcher.sh ./long_running_cmd &  # move the terminal window (requires window process to be in background) sleep 1 xdotool search --name launcher.sh windowmove 0 0 

Und ~ / bin / launcher.sh soll das ausführen, was als Befehlszeilenargument an sie übergeben wird:

#!/bin/bash  # execute command line arguments $@ 

Aber ich konnte das Xterm-Fenster nicht schließen, nachdem long_running_cmdes fertig ist.

Ich denke, so etwas xterm -e ~/bin/launcher.sh "./long_running_cmd && kill $PPID" &könnte das sein, was ich suche, so dass xterm im Hintergrund gestartet wird und es läuft ./long_running_cmd && kill $PPID. Die Shell im xterm-Fenster führt dann den lang laufenden Befehl aus, und wenn sie erfolgreich abgeschlossen wird, wird der übergeordnete Prozess der Shell (dh der Prozess, der das xterm-Fenster besitzt) beendet, wodurch das xterm-Fenster geschlossen wird.

Aber das funktioniert nicht: Es passiert nichts, daher vermute ich, dass meine Zitate oder Fluchtungen falsch sind und ich es nicht beheben konnte.

Ein alternativer Ansatz wäre, die PID von zu erhalten long_running_cmd, waitzu warten, bis sie beendet ist, und das Xterm-Fenster mit zu beenden kill $!(da $!sich auf die letzte im Hintergrund gestartete Task bezieht, die das Xterm-Fenster ist). Aber ich kann keinen guten Weg finden, um den PID- und Exit-Wert von long_running_cmdout aus der Shell im Xterm-Fenster und in die Shell zu ermitteln, die das Xterm-Fenster gestartet hat (kurz nachdem sie in eine Datei geschrieben wurden, was so scheint.) sollte unnötig sein?).

Was mache ich falsch oder gibt es einen einfacheren Weg, dies zu erreichen?

0
Funktioniert 'exit' nicht? arbeitet mit meinen Skripten. captain_G vor 11 Jahren 0

1 Antwort auf die Frage

1
Silviu

HINT! You could verify the exit code of the previous executed command:

if [ $? -eq 0 ] then exit 0 fi