HINT! You could verify the exit code of the previous executed command:
if [ $? -eq 0 ] then exit 0 fi
Ich versuche ein Skript zu schreiben, um Folgendes zu tun:
Um es in Windows auszudrücken: Ich hätte gerne das Linux-Äquivalent von, start cmd /c long_running_cmd
falls long_running_cmd
erfolgreich, und das Gleiche tun, start cmd /k long_running_cmd
wenn 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_cmd
es 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
, wait
zu 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_cmd
out 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?
HINT! You could verify the exit code of the previous executed command:
if [ $? -eq 0 ] then exit 0 fi