Probleme mit Shellscript und "Befehl ausführen"
Hallo, ich habe hier ein kleines Shellscript, was Probleme macht, wenn ich es mit "Befehl ausführen" ausführe. Das Programm startet im Hintergrund, der Dialog von "Befehl ausführen" verschwindet nicht. Erst wenn ich das Programm beende, bekomme ich folgende Fehlermeldung: "KDEInit konnte "rssowl" nicht starten.". Wenn ich das Programm aus dem K-Menü aufrufe oder in der Konsole starte, gibt es keine Probleme. Auch wenn ich in "Befehl ausführen" ein Häkchen bei "In Terminal starten" mache, funktioniert es, ist allerdings unschön, da die Shell ja die ganze Zeit offen sein muss. Hier das Script: ------------------------------------ #!/bin/sh # # startscript for rssowl # cd /usr/share/rssowl exec java -jar -Djava.library.path=/usr/lib/ rssowl.jar "$@" ------------------------------------ Die Probleme mit dem Script sind erst aufgetauscht, seitdem ich exec verwende, um Kommandozeilenparameter an das Programm weiterleiten zu können. Gibt es dafür evtl. noch andere Möglichkeiten? MfG Kay
Hallo Kay, * Kay Patzwald [12.06.2005 18:14]:
Die Probleme mit dem Script sind erst aufgetauscht, seitdem ich exec verwende, um Kommandozeilenparameter an das Programm weiterleiten zu können. Gibt es dafür evtl. noch andere Möglichkeiten?
Nein, das hast du falsch verstanden. Das "exec" dient nicht zum Weiterleiten der Parameter, dafür ist das "$@", sondern dass der Prozess des Schellskripts durch den Java-Prozess ersetzt wird. Ohne das exec würde das Startskript bis zur Beendingung von java (rssowl) warten und dann sich beenden, d. h. du hast letztlich einen unnützen Prozess im System. Gruß, Bernhard
On Sun, 12 Jun 2005 18:39:31 +0200, Bernhard Walle <bernhard.walle@gmx.de> wrote:
Hallo Kay,
* Kay Patzwald [12.06.2005 18:14]:
Die Probleme mit dem Script sind erst aufgetauscht, seitdem ich exec verwende, um Kommandozeilenparameter an das Programm weiterleiten zu können. Gibt es dafür evtl. noch andere Möglichkeiten?
Nein, das hast du falsch verstanden. Das "exec" dient nicht zum Weiterleiten der Parameter, dafür ist das "$@", sondern dass der Prozess des Schellskripts durch den Java-Prozess ersetzt wird.
Ohne das exec würde das Startskript bis zur Beendingung von java (rssowl) warten und dann sich beenden, d. h. du hast letztlich einen unnützen Prozess im System.
Stimmt, richtig.
Gruß, Bernhard
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
On Sun, 12 Jun 2005 18:14:45 +0200, Kay Patzwald <mailing-lists@gmx.de> wrote:
Hallo,
ich habe hier ein kleines Shellscript, was Probleme macht, wenn ich es mit "Befehl ausführen" ausführe. Das Programm startet im Hintergrund, der Dialog von "Befehl ausführen" verschwindet nicht. Erst wenn ich das Programm beende, bekomme ich folgende Fehlermeldung: "KDEInit konnte "rssowl" nicht starten.". Wenn ich das Programm aus dem K-Menü aufrufe oder in der Konsole starte, gibt es keine Probleme. Auch wenn ich in "Befehl ausführen" ein Häkchen bei "In Terminal starten" mache, funktioniert es, ist allerdings unschön, da die Shell ja die ganze Zeit offen sein muss.
Ich habe das gleiche Problem jetzt auch bei einem anderen Start-Skript (auch für ein RPM). Hat niemand ne Idee, wie man das Problem lösen kann? Hier das andere Skript, was ich nicht selber geschrieben habe: #!/bin/bash # Based on Start-Script provided by Azureus ######## CONFIGURE ######## JAVA_PROGRAM_DIR="" # use full path to java bin dir, ex. "/usr/java/j2sdk1.4.2/bin/" PROGRAM_DIR="/usr/share/tvbrowser" # use full path to TV-Browser bin dir ##########i################# MSG0="Loading TV-Browser:" MSG1="Starting TV-Browser..." MSG2="Java exec found in " MSG3="OOPS, your java version is too old " MSG4="You need to upgrade to JRE 1.4.x or newer from http://java.sun.com" MSG5="Suitable java version found " MSG6="Configuring environment..." MSG7="OOPS, you don't seem to have a valid JRE " MSG8="OOPS, unable to locate java exec in " MSG9=" hierarchy" MSG10="Java exec not found in PATH, starting auto-search..." MSG11="Java exec found in PATH. Verifying..." look_for_java() { JAVADIR=/usr/java IFS=$'\n' potential_java_dirs=(`ls -1 "$JAVADIR" | sort | tac`) IFS= for D in "${potential_java_dirs[@]}"; do if [[ -d "$JAVADIR/$D" && -x "$JAVADIR/$D/bin/java" ]]; then JAVA_PROGRAM_DIR="$JAVADIR/$D/bin/" echo $MSG2 $JAVA_PROGRAM_DIR if check_version ; then return 0 else return 1 fi fi done echo $MSG8 "${JAVADIR}/" $MSG9 ; echo $MSG4 return 1 } check_version() { JAVA_HEADER=`${JAVA_PROGRAM_DIR}java -version 2>&1 | head -n 1` JAVA_IMPL=`echo ${JAVA_HEADER} | cut -f1 -d' '` if [ "$JAVA_IMPL" = "java" ] ; then VERSION=`echo ${JAVA_HEADER} | sed "s/java version \"\(.*\)\"/\1/"` if echo $VERSION | grep "^1.[0-3]" ; then echo $MSG3 "[${JAVA_PROGRAM_DIR}java = ${VERSION}]" ; echo $MSG4 return 1 else echo $MSG5 "[${JAVA_PROGRAM_DIR}java = ${VERSION}]" ; echo $MSG6 return 0 fi else echo $MSG7 "[${JAVA_PROGRAM_DIR}java = ${JAVA_IMPL}]" ; echo $MSG4 return 1 fi } echo $MSG1 # locate and test the java executable if [ "$JAVA_PROGRAM_DIR" == "" ]; then if ! command -v java &>/dev/null; then echo $MSG10 if ! look_for_java ; then exit 1 fi else echo $MSG11 if ! check_version ; then if ! look_for_java ; then exit 1 fi fi fi fi # get the app dir if not already defined if [ -z "$PROGRAM_DIR" ]; then PROGRAM_DIR=`dirname "$0"` PROGRAM_DIR=`cd "$PROGRAM_DIR"; pwd` else if [ "$(echo ${PROGRAM_DIR}/*.jar)" = "${PROGRAM_DIR}/*.jar" ]; then echo "You seem to have set an invalid PROGRAM_DIR, unable to continue!" exit 1 elif ! (echo ${PROGRAM_DIR}/*.jar | grep tvbrowser.jar >/dev/null 2>&1 ); then echo "Unable to locate tvbrowser.jar in $PROGRAM_DIR, aborting!" exit 1 fi fi echo $MSG0 cd ${PROGRAM_DIR} echo "${JAVA_PROGRAM_DIR}java -Xms16m -Xmx128m -Djava.library.path=\"${PROGRAM_DIR}\" -jar tvbrowser.jar '$@'" ${JAVA_PROGRAM_DIR}java -Xms16m -Xmx128m -Djava.library.path="${PROGRAM_DIR}" -jar tvbrowser.jar "$@" echo "TV-Browser TERMINATED."
Hallo, Am Sat, 03 Sep 2005, Kay Patzwald schrieb:
On Sun, 12 Jun 2005 18:14:45 +0200, Kay Patzwald <mailing-lists@gmx.de>
Wenn ich das Programm aus dem K-Menü aufrufe oder in der Konsole starte, gibt es keine Probleme. Auch wenn ich in "Befehl ausführen" ein Häkchen bei "In Terminal starten" mache, funktioniert es, ist allerdings unschön, da die Shell ja die ganze Zeit offen sein muss.
Ich habe das gleiche Problem jetzt auch bei einem anderen Start-Skript (auch für ein RPM). Hat niemand ne Idee, wie man das Problem lösen kann?
[..]
cd ${PROGRAM_DIR}
echo "${JAVA_PROGRAM_DIR}java -Xms16m -Xmx128m -Djava.library.path=\"${PROGRAM_DIR}\" -jar tvbrowser.jar '$@'" ${JAVA_PROGRAM_DIR}java -Xms16m -Xmx128m -Djava.library.path="${PROGRAM_DIR}" -jar tvbrowser.jar "$@"
echo "TV-Browser TERMINATED."
Das ganze ist ja auch kein Start-script sondern ein wrapperscript wie z.B. 'mozilla' (und mozilla-bin ist das eigentliche Programm). Das script verhaelt sich also richtig, sinnvoller waere aber ein 'exec' damit die bash, die das script ausfuehrt, ersetzt wird. Um das von dir gewuenschte Verhalten zu bekommen rufe das script korrekt auf (d.h. korrigiere den Aufruf in KDE): scriptname PARAMETER & Wie sieht die .desktop des Dinges denn aus? -dnh -- Never attribute to malice that which can be adequately explained by stupidity. -- Hanlon's razor
Hallo, ich habe das unten stehende Problem jetzt weiter eingekreist. Auch unter SuSE 10 habe ich das Problem, dass der Dialog "Befehl ausführen" nicht geschlossen wird, obwohl das Programm im Hintergrund schon längst läuft. Mir ist jetzt aber aufgefallen, dass das Script ohne Probleme funktioniert, wenn es die Endung "sh" hat, ohne die Endung gibt es das Problem. Übrigens spielt es keine Rolle, was im Script steht. Ein einfaches Script wie: #!/bin/sh cd /usr/share/tvbrowser sh tvbrowser.sh macht genauso Probleme. Kann damit jetzt jemand mehr anfangen? Ich habe beim letzten Mal, als ich hier was zu dem Thema gepostet habe, übersehen, dass Herr Haller geantwortet hat und nach der .desktop gefragt hat. Hier also .desktop-Datei: [Desktop Entry] Encoding=UTF-8 BinaryPattern=tvbrowser.sh; Name=TV-Browser Comment=TV-Browser - Eine digitale TV-Zeitschrift MimeType= Exec=tvbrowser.sh GenericName=TV-Zeitschrift Icon=tvbrowser TerminalOptions= Path= Type=Application Terminal=0 X-KDE-StartupNotify=true X-DCOP-ServiceType=Multi Categories=TV MfG Kay On Sat, 03 Sep 2005 10:30:06 +0200, Kay Patzwald <mailing-lists@gmx.de> wrote:
On Sun, 12 Jun 2005 18:14:45 +0200, Kay Patzwald <mailing-lists@gmx.de> wrote:
Hallo,
ich habe hier ein kleines Shellscript, was Probleme macht, wenn ich es mit "Befehl ausführen" ausführe. Das Programm startet im Hintergrund, der Dialog von "Befehl ausführen" verschwindet nicht. Erst wenn ich das Programm beende, bekomme ich folgende Fehlermeldung: "KDEInit konnte "rssowl" nicht starten.". Wenn ich das Programm aus dem K-Menü aufrufe oder in der Konsole starte, gibt es keine Probleme. Auch wenn ich in "Befehl ausführen" ein Häkchen bei "In Terminal starten" mache, funktioniert es, ist allerdings unschön, da die Shell ja die ganze Zeit offen sein muss.
Ich habe das gleiche Problem jetzt auch bei einem anderen Start-Skript (auch für ein RPM). Hat niemand ne Idee, wie man das Problem lösen kann?
Hier das andere Skript, was ich nicht selber geschrieben habe:
#!/bin/bash
# Based on Start-Script provided by Azureus
######## CONFIGURE ######## JAVA_PROGRAM_DIR="" # use full path to java bin dir, ex. "/usr/java/j2sdk1.4.2/bin/" PROGRAM_DIR="/usr/share/tvbrowser" # use full path to TV-Browser bin dir ##########i#################
MSG0="Loading TV-Browser:" MSG1="Starting TV-Browser..." MSG2="Java exec found in " MSG3="OOPS, your java version is too old " MSG4="You need to upgrade to JRE 1.4.x or newer from http://java.sun.com" MSG5="Suitable java version found " MSG6="Configuring environment..." MSG7="OOPS, you don't seem to have a valid JRE " MSG8="OOPS, unable to locate java exec in " MSG9=" hierarchy" MSG10="Java exec not found in PATH, starting auto-search..." MSG11="Java exec found in PATH. Verifying..."
look_for_java() { JAVADIR=/usr/java IFS=$'\n' potential_java_dirs=(`ls -1 "$JAVADIR" | sort | tac`) IFS= for D in "${potential_java_dirs[@]}"; do if [[ -d "$JAVADIR/$D" && -x "$JAVADIR/$D/bin/java" ]]; then JAVA_PROGRAM_DIR="$JAVADIR/$D/bin/" echo $MSG2 $JAVA_PROGRAM_DIR if check_version ; then return 0 else return 1 fi fi done echo $MSG8 "${JAVADIR}/" $MSG9 ; echo $MSG4 return 1 }
check_version() { JAVA_HEADER=`${JAVA_PROGRAM_DIR}java -version 2>&1 | head -n 1` JAVA_IMPL=`echo ${JAVA_HEADER} | cut -f1 -d' '` if [ "$JAVA_IMPL" = "java" ] ; then VERSION=`echo ${JAVA_HEADER} | sed "s/java version \"\(.*\)\"/\1/"` if echo $VERSION | grep "^1.[0-3]" ; then echo $MSG3 "[${JAVA_PROGRAM_DIR}java = ${VERSION}]" ; echo $MSG4 return 1 else echo $MSG5 "[${JAVA_PROGRAM_DIR}java = ${VERSION}]" ; echo $MSG6 return 0 fi else echo $MSG7 "[${JAVA_PROGRAM_DIR}java = ${JAVA_IMPL}]" ; echo $MSG4 return 1 fi }
echo $MSG1
# locate and test the java executable if [ "$JAVA_PROGRAM_DIR" == "" ]; then if ! command -v java &>/dev/null; then echo $MSG10 if ! look_for_java ; then exit 1 fi else echo $MSG11 if ! check_version ; then if ! look_for_java ; then exit 1 fi fi fi fi
# get the app dir if not already defined if [ -z "$PROGRAM_DIR" ]; then PROGRAM_DIR=`dirname "$0"` PROGRAM_DIR=`cd "$PROGRAM_DIR"; pwd` else if [ "$(echo ${PROGRAM_DIR}/*.jar)" = "${PROGRAM_DIR}/*.jar" ]; then echo "You seem to have set an invalid PROGRAM_DIR, unable to continue!" exit 1 elif ! (echo ${PROGRAM_DIR}/*.jar | grep tvbrowser.jar >/dev/null 2>&1 ); then echo "Unable to locate tvbrowser.jar in $PROGRAM_DIR, aborting!" exit 1 fi fi
echo $MSG0
cd ${PROGRAM_DIR}
echo "${JAVA_PROGRAM_DIR}java -Xms16m -Xmx128m -Djava.library.path=\"${PROGRAM_DIR}\" -jar tvbrowser.jar '$@'" ${JAVA_PROGRAM_DIR}java -Xms16m -Xmx128m -Djava.library.path="${PROGRAM_DIR}" -jar tvbrowser.jar "$@"
echo "TV-Browser TERMINATED."
Am Sonntag, 6. November 2005 21:05 schrieb Kay Patzwald:
Auch unter SuSE 10 habe ich das Problem, dass der Dialog "Befehl ausführen" nicht geschlossen wird, obwohl das Programm im Hintergrund schon längst läuft. Mir ist jetzt aber aufgefallen, dass das Script ohne Probleme funktioniert, wenn es die Endung "sh" hat, ohne die Endung gibt es das Problem. Übrigens spielt es keine Rolle, was im Script steht. Ein einfaches Script wie:
#!/bin/sh cd /usr/share/tvbrowser sh tvbrowser.sh
macht genauso Probleme.
Kann ich unter SuSE 9.3/KDE 3.4.2b nicht nachvollziehen. Ein freundliches "~/.tvbrowser/start" macht genau das, was es soll und der Dialog "Befehl ausführen" schliesst sich wieder. Im Skript "start" steht nur: === #!/bin/bash cd $HOME/.tvbrowser java -Duser.language=de -jar tvbrowser.jar === Vielleicht liegt es an der verwendeten Shell, fehlenden Parametern, oder daran, dass der Kram bei mir nur im Homeverzeichnis installiert ist. Musst Du mal austesten, wenn sonst kein anderer Vorschlag kommt. wolfgang
Am Sonntag, 6. November 2005 22:36 schrieb Wolfgang Denda:
(...). Vielleicht liegt es an der verwendeten Shell, fehlenden Parametern, oder daran, dass der Kram bei mir nur im Homeverzeichnis installiert ist. Musst Du mal austesten, wenn sonst kein anderer Vorschlag kommt.
Ich hab den Thread nicht ganz mitbekommen, schließt sich der KDE-Dialog nicht oder das Fenster der Shell nicht? KDE hat da so Magic eingebaut und schließt die Shell nicht unbedingt: http://www.kdedevelopers.org/node/1572#comment-3943 Gruß, Jan -- Sooner or later you must pay for your sins.
On Mon, 07 Nov 2005 01:08:52 +0100, Jan Ritzerfeld <suse@mailinglists.jan.ritzerfeld.net> wrote:
Am Sonntag, 6. November 2005 22:36 schrieb Wolfgang Denda:
(...). Vielleicht liegt es an der verwendeten Shell, fehlenden Parametern, oder daran, dass der Kram bei mir nur im Homeverzeichnis installiert ist. Musst Du mal austesten, wenn sonst kein anderer Vorschlag kommt.
Ich hab den Thread nicht ganz mitbekommen, schließt sich der KDE-Dialog nicht oder das Fenster der Shell nicht? KDE hat da so Magic eingebaut und schließt die Shell nicht unbedingt: http://www.kdedevelopers.org/node/1572#comment-3943
Nein, der Dialog schließt sich nicht und gibt eine Fehlermeldung, wenn ich das Programm, was ja im Hintergrund normal startet, schließe, eine Fehlermeldung: "KDEInit konnte "tvbrowser" nicht starten.".
Gruß, Jan
participants (5)
-
Bernhard Walle
-
David Haller
-
Jan Ritzerfeld
-
Kay Patzwald
-
Wolfgang Denda