# Im KDE skript im Terminal ausführen und nicht schliessen

## SarahS93

Habe eine .sh Datei die ein Programm aufruft und es in den Hintergrund macht.

Das Skript kann ich als User Starten, das Programm geht in den Hintergrund und alles ist gut, vom Terminalfenster aus.

Nun will ich das Skript per Doppelclick clicken und es soll über das xterm Terminalfenster (benutze im KDE das Programm "konsole") gestartet werden. Ich will das dass xterm Fenster das Skript aufruft damit falls das Skript fehlermeldungen ausgibt, ich sie sehen kann.

Wie stelle ich das an? Mit rechtsclick auf das Skript finde ich nichts wo ich sagen kann "nach beendigung geöffnet lassen", diese Option gibt es nur wenn ich eine Desktop-Verknüpfung mache. Mache ich das, habe ich aber "konsole"-Terminalfenster.

Über z.B. Alt + F2 kann ich "xterm mc" eingeben, und ich habe den Midnight Commander im Xterm Terminalfenster.

Aber mit "xterm /mein/script.sh" tut das nicht. Wie muss ich vorgehen?

----------

## py-ro

Bei konsole

```
konsole --help
```

Dort findest dann --no-close oder --hold.

----------

## SarahS93

Naja, ich will ja nicht "konsole" benutzen, sondern xterm.

----------

## py-ro

Oben schriebst aber konsole, naja, bei xterm kannst nach -hold schauen.

----------

## SarahS93

Dann habe ich mich nicht ganz richtig ausgedrückt.

Ich will auf meinem KDE Desktop eine Verknüpfung anlegen die auf eine .sh Datei zeigt.

Wenn ich diese verknüpfung anclicke, will ich das ein xterm Fenster kommt das meine .sh Datei aufruft und sich aber nicht schliesst.

In der .sh Datei rufe ich ein Programm auf das sich in den Hintergrund macht.

----------

## franzf

Dann erstell doch ein weiteres script, das "xterm -hold eigentliches_script.sh" o.Ä. aufruft und erstell dafür einen shortcut auf deinem desktop.

Oder verwend yakuake und ruf da das script einfach direkt auf? (Ich hab nie verstanden, warum Leute lieber auf dem nicht immer sichtbaren Desktop rumclicken als ne konsole oder Alt+F2 zu verwenden, aber naja  :Wink: )

----------

## musv

Du kannst auch einfach am Ende Deines Scripts ein:

```
read
```

rankleben. Dann wartet die Konsole solange, bis eine Taste gedrückt wurde, bevor sie sich schließt.

----------

## SarahS93

Mit "read" am Ende vom Script tut sich bei mir nichts. Als wenn es garnicht beachtet werden würde.

Mit einem weiterem Scripte, in dem

#!/bin/sh

xterm -hold meinscript.sh

steht, erhalte ich die Aussage "xterm: No absolute path found for shell:".

Schreibe ich den gesamten Pfad dazu, funktioniert es, jedoch wenn ich das xterm Fenster schliesse, schliesst sich auch das Programm das durch das erste Script in den Hintergrund gelegt wurde.

----------

## Christian99

wie legst du denn das programm in den Hintergrund? mit "&"?

Wahrscheinlich musst du noch ein "nohup" dem befehl vorne ranstellen.

----------

## SarahS93

Ja, mit & lege ich es in den Hintergrund.

Egal ob nur im 1. , 2. oder in beiden Scripten ein "nohup" steht, es zeigt keine positive wirkung.

Hier meine beiden Scripte:

vm01_2_start.sh

```

#!/bin/sh

nohup qemu-kvm \

  -k de -enable-kvm -smp 8 -m 2048 -localtime -name __vm01-test__ \

  -hda vm01_disk1.img \

  -hdb vm01_disk2.img \

  -vga vmware \

  -net nic,model=virtio,macaddr=00:00:00:00:00:01 \

  -net tap,ifname=qtap1,script=no,downscript=no \

  -usbdevice tablet \

  -qmp tcp:127.0.0.1:4444,server,nowait \

  -vnc 192.168.178.33:1 &

echo $! > ./vm01_run.pid

#   -cdrom install-amd64-minimal-20131010.iso \

#   -boot d \

read

```

Mit diesem Scripte starte ich meine VM von dem Terminalemulator "konsole"

Wenn ich dieses Script über die KDE Oberfläche aus anclicke, startet die VM auch, scheinbar jedenfalls.

Ich erhalte keine Meldung ob sie dies wirklich tut oder ob es eine Fehlermeldung gab.

Über den Terminalemulator "konsole" würde ich eine Fehlermeldung angezeigt bekommen.

So, nun das 2. Script das ich nur von der KDE Oberfläche aus nutze um das erste Script aufzurufen.

vm01_starten.sh

```

#!/bin/sh

nohup xterm -hold /mnt/test/vm01_2_start.sh

read
```

Ich will im KDE auf etwas clicken können, das mir in einem xterm Fenster anzeigt ob und wie qemu-kvm gestartet wird.

Wie muss ich das anstellen?!

----------

## Christian99

also, wenn du xterm einen scriptnamen mitgibst, dann musst du da noch ein -e davor machen. außerdem macht beim xterm das nohup keinen sinn, das willst du ja nicht im hintergrund laufen lassen. also sollte das so aussehen:

```
xterm -e /mnt/test/vm01_2_start.sh
```

das musst du auch nicht in ein skript machen, das geht auch als anwendungsstarter.

----------

## SarahS93

Wenn ich ALT + F2 mache, und dann dort

xterm -e /mnt/test/vm01_2_start.sh

eingebe, habe ich plötzlich auf dem Desktop eine "vm01_run.pid" Datei.

Und startet tut es auch nicht.

Auch wenn ich es als Verknüpfung auf dem KDE Desktop anlege, das gleiche. Es kommt nichts wenn ich es doppelclicke.

----------

## Christian99

steht in der .pid datei was drin?

und was passiert wenn du

```
xterm -hold -e /mnt/test/vm01_2_start.sh
```

 machst?

----------

## franzf

 *SarahS93 wrote:*   

> Wenn ich ALT + F2 mache, und dann dort
> 
> xterm -e /mnt/test/vm01_2_start.sh
> 
> eingebe, habe ich plötzlich auf dem Desktop eine "vm01_run.pid" Datei.

 

Klar, wegen dieser Zeile in deinem start-script:

```
echo $! > ./vm01_run.pid
```

----------

## mrueg

Um das sofortige Schließen zu verhindern kann man auch soetwas wie

xterm -e "script.sh; exec bash" nutzen. Das kommt vermutlich nahe an das ran, was du eigentlich willst.

----------

## SarahS93

#!/bin/sh

xterm -e "script.sh; exec bash"

Tuts, aber wenn ich das xterm-Fenster zu mache, wird auch das Programm das ich in script.sh aufrufe beendet

erweitere ich es nach

#!/bin/sh

cd /pfad/

xterm -e "script.sh; exec bash"

und erstelle von dem Script das dass Script aufruft eine Verknüpfung auf den Desktop, hab ich schonmal

das Problem mit der .pid Datei nicht mehr, die komm nämlich jetzt in den richtigen Pfad (-;

Erweitere ich nochmals um

xterm -hold -e "script.sh; exec bash"

und will dann das xterm-Fenster schliessen, über X oben rechts, bleibt es noch da, und zeigt mir an

qemu: terminating on signal 1 from pid 12356

Mein Programm, qemu-kvm, lässt sich scheinbar auch mit Optionen wie "-pidfile" und "deamonsize" aufrufen. Daher ist mein scheinbar umständlicher weg garnicht nötig. Dennoch würde ich gerne verstehen warum es auf meine Methode so schwierig ist das so hinzubekommen....

----------

## SarahS93

Bei qemu-kvm benutze ich nun die Optionen "-daemonize" und "-pidfile", es funktioniert!

----------

