shellscript starten in KDE

  • Hi!

    Ich würde gern folgendes tun: Ich hab eine Hand voll shellscript und will die nicht im shell selbst mit ./script starten. Ich will mir am Desktop Symbole anlegen, hinter denen die Scripts stehen. Soll heißen, wenn ich das Script starten will, dann klicke ich auf das entsprechende Icon.

    Bis jetzt habe ich es so weit gebracht, daß ich ein Start angelegt hätte. Das Problem dabei ist aber nur, daß die die Frage bekomme, was ich mit der Datei machen will mit Auswahl "im Shell ausführen", "Anzeigen", "Abbrechen" und "Ausführen". Außerdem verschwindet das Shell (nach "im Shell ausführen") sofort wieder. Meine zwei Probleme sind also:

    1) wie verhindere ich diese "Zwischenmeldung"?
    2) wie kann ich dafür sorgen, daß das Shell offen bleibt?

    ich will hier die Funktionalität erreichen, wie ich sie mit dem bereits offenen Terminal und ./script erreiche.

    Die Dialogboxen bieten mir hierfür keinerlei Einstellmöglichkeiten. Wie kann ich das dennoch erreichen? Also Klick aufs Icon und Ausführung des Scripts in offenem Terminal, daß ich die Ausgabemeldungen sehe bzw. daß die Befehle nicht sofort terminiert werden.

    Danke!

    Lg,
    Stephan.

  • Also wenn du ein Shellscript schreibst und dann ausführst wird eine shell gespawnt, in der das script läuft und die wird natürlich gleich wieder geschlossen, wenn das script aus ist.
    D.h. wenn du was zurückgeben willst das länger dastehn soll, dann schreibst du das explizit ins script (z.B. einfach ein read o.ä.)
    ODER du willst eigentlich ein Terminal aufmachen und halt gleich nach aufmachen dein Script laufen lassen. Dann kannst das script sicher irgendwie als Argument angeben. Müsst ich aber jetzt selbst nachschaun (=> man bash/sh/whatever).

    Aja.. die Zwischenmeldung hab ich jetzt vergessen. Probiers mit einem symbolic link in deinem .desktop-verzeichnis. (od. gibts bei KDE nicht eh sowas wie eine Verknüpfung wie in Win auch?). Müsst ich jetzt auch nachschaun. Ich sags dir wenn ich zufällig wieder mal im KDE vorbeikommen sollte ;)

    Let us be thankful we have commerce. Buy more. Buy more now. Buy. And be happy.

  • Der zweite Teil ist einfacher zu beantworten:

    Code
    read -p "Bitte Taste druecken..."


    als letzte Zeile in dein Script geben.

    Der erste Teil lässt sich auch irgendwie machen, ich komm aber grad nicht drauf, wie... es geht jedenfalls manuell auch, in der .desktop Datei muss der Exec-Eintrag "konsole -e dein_script" sein...

    Dipper dipper dii dipper dii dipper dii duuu

  • Zitat von [fl]Quel`Tos

    Also wenn du ein Shellscript schreibst und dann ausführst wird eine shell gespawnt, in der das script läuft und die wird natürlich gleich wieder geschlossen, wenn das script aus ist.
    D.h. wenn du was zurückgeben willst das länger dastehn soll, dann schreibst du das explizit ins script (z.B. einfach ein read o.ä.)
    ODER du willst eigentlich ein Terminal aufmachen und halt gleich nach aufmachen dein Script laufen lassen. Dann kannst das script sicher irgendwie als Argument angeben. Müsst ich aber jetzt selbst nachschaun (=> man bash/sh/whatever).



    Nun, ich hab z.B. ein script geschrieben, das mir 5 Programme nacheinander startet. Alle diese Programme geben selbst Statusmeldungen aus, z.B. wenn ein Datenpaket verarbeitet wird und damit eine Aktion in einem Programm auslöst. Wenn also das Skript im laufenden Terminal gestartet wird, dann sehe ich laufend Unmengen an Statusmeldungen, bis ich alle Programme terminiere. Läßt sich mit einem "ping -t xxxx" vergleichen. Sowas in der Art machen meine Programme. Und das soll im Terminal natürlich zu sehen sein, sonst machts ja keinen Sinn, das auszugeben. Ganz abgesehen davon, daß eines dieser Programme ein GUI startet, welches natürlich sonst auch gleich wieder weg wäre, bevor ich noch irgendwas dabei machen kann.

    Daher ist der Tip gut gemeint auf eine Eingabe mit Read zu warten, hilft aber leider wohl nicht weiter, weil das vielleicht meine Programme sperrt, solange nicht eingegeben wird, oder?

    Also kurz gesagt, ich habe mehrere Programme, wobei eines ein GUI startet, die anderen ständig output a la "ping -t" liefern. Und das will ich sehen, bis ich die Programme beende.

    Ich hab zwar auch einige Skripts, die mir einfach Dateien von A nach B kopieren bzw. austauschen, da störts mich ja nicht, wenn das Terminal gleich wieder zu ist. Aber genau bei dem einen Skript (das ich sinnigerweise startall.sh getauft habe) ist das kontraproduktiv.

    Lg,
    Stephan.

  • also am besten machst du folgendes:
    A,B sind deine skripte die du ausführen willst
    start ist das startskript

    in start steht:
    #!/bin/bash
    gnome-terminal --command="A"
    gnome-terminal --command="B"

    das startet 2 terminal mit deinen skripten drin (das sie automatisch beenden kannst du - wie sauzachn schon geschrieben hat - mit "read -p "Bitte Taste drücken ..." in A bzw. B abfangen)

    das ganze is jetz zwar für das gnome terminal (hab kein KDE) aber das sollte mit der "Konsole" im prinzip auch funktionieren :)

    damit die meldung mit mit dem anzeigen nicht kommt erstellst du einfach einen starter (eine verknüpfung) auf das startskript ...

    mfg

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

  • Zitat von eaglo

    das startet 2 terminal mit deinen skripten drin (das sie automatisch beenden kannst du - wie sauzachn schon geschrieben hat - mit "read -p "Bitte Taste drücken ..." in A bzw. B abfangen)



    das sonderbare ist hier allerdings: Wenn ich dieses read -p Kommando am Ende des Skripts reinsetze, passiert garnichts, das Fenster geht trotzdem zu, so als ob ich diese Zeile erst garnicht drinnen hätte.

    Wenn ich die Befehlszeile aber direkt ins Terminal schreibe, dann gehts. Bzw. wenn ich das Skript direkt im Terminal starte ...

    Verstehe ich zwar nicht ganz. Was ich mir momentan überlege ist, ob man mit sleep() das schließen verhindern kann, allerdings glaub ich, daß ich damit wohl auch meine Tasks schlafen schicke :(

    Mal schauen, ob ich aus dem einen Script ein anderes aufrufen kann, welches mir das Schließen des Fensters unterbindet ...

    Stephan.

  • also ich hab jetz angenommen dass das mit dem read -p funktioniert :) ...
    probier einfach mal:

    print "Bitte eine Taste drücken"
    read

    sollte auch gehn ...

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

  • also ich hab das nun so gelöst (zwar nicht elegant, aber es geht trotzdem):

    xterm -e sh -c "script.sh; sh"

    dann hab ich zwar auch ein leeres Terminalfenster aber so funkts, wenn auch wie gesagt nicht elegant. Aber ich will damit ja keinen Schönheitspreis gewinnen. Wenns doch anders geht und das besser aussieht, dann klarerweise bevorzugt!

    Danke jedenfalls für alle Tips!

    Lg,
    Stephan.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!