ubuntuusers.de

script funktioniert nicht

Status: Gelöst | Ubuntu-Version: Lubuntu 24.04 (Noble Numbat)
Antworten |

Stabsgefreiter

Avatar von Stabsgefreiter

Anmeldungsdatum:
27. Juli 2008

Beiträge: 826

Wohnort: Berlin

hallo,

zur Katalogisierung meiner Filme benutze ich das Prog MYMDb-CE. Unter lubuntu 22.04 ließ sich die MYMDb-CE.jar Datei über Eigenschaften ausführbar machen und damit dann das Prog starten was jetzt aber nicht mehr funktioniert ( unter mxlinux schon ) ich habe mir dann eine ausführbare mdb.sh gmacht ( war im Handbuch auch so vorgeschlagen ) und denn dort

bash c- cd ~/MyMDb-CE$ java -jar MyMDb-CE.jar

reinkopiert. wenn ich die mdb.sh Datei mit Doppelklick starte, öffnet sich das Terminal, aber das programm wird nicht gestartet

wenn ich allerdings in das Terminal eingebe

saturn@lenovo3000n200:~$ ./MyMDb-CE/mdb.sh
saturn@lenovo3000n200:~$

startet das Programm. Wo kann hier der Fehler liegen?

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3859

Ein Script braucht immer eine Shebang Zeile.

Marantkurz

Anmeldungsdatum:
7. September 2023

Beiträge: 802

bash c-

bash -c ".."

CE$ soll das so?

bzw.

@schwarzheit Ein Script braucht immer eine Shebang Zeile.

edit Habe gerade featgestellt der öffnet das V. doch nicht.

Marantkurz

Anmeldungsdatum:
7. September 2023

Beiträge: 802

Nimm die Form:

https://forum.ubuntuusers.de/post/1477455/

Keine Ahnung wo heute java liegt die letzte Zeile so:

java -jar .

edit heute ist der wurm drin, das wird wohl auch nicht funktionieren

Eigentlich war ich der Meinung, das sollte laufen:

bash -c "cd ~/MyMDb-CE ; java -jar MyMDb-CE.jar"

wäre zwar bei dem "bash -c" doppelt gemoppelt falls noch #!/bin/bash, dennoch sollte es laufen. ($ aus Pfad entfernt)

#!/bin/bash
cd ~/MyMDb-CE
java -jar MyMDb-CE.jar

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13140

Marantkurz schrieb:

#!/bin/bash
cd ~/MyMDb-CE
java -jar MyMDb-CE.jar

Warum CWD wechseln? Falls noch weitere Argumente übergeben werden und das Dateinamen relativ zur Position der aufrufenden Shell sind, dann kann das Programm die nicht lesen. Ich würde das lieber so machen:

1
2
#!/bin/sh
exec java -jar ~/MyMDb-CE/MyMDb-CE.jar "$@"

Marantkurz

Anmeldungsdatum:
7. September 2023

Beiträge: 802

"java -jar" kann den Pfad interpretieren? Hatte schon überlegt das mglw. per java zu machen, aber wenn das doch so gehen sollte..

"$@" was macht in dem Fall das?

Nochwas: Kann nicht eigentlich der Interpreter auch weg?(oder wegen exec ~/.. "$@", im Fall des abolutem Pfades mglw.? Obwohl, dann wird "-jar .." vmtl. nicht beachtet)

#!/bin/sh

Dan wäre ja noch die Frage was "java" eigentlich ist, Binary oder (bash/sh) Script. Im 2. Fall wäre es doch sicher egal, ob #!/bin/sh im eigentlichen Script steht oder nicht.(sofern nicht losgelöst)

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9574

Wohnort: Münster

Stabsgefreiter schrieb:

[…] Unter lubuntu 22.04 ließ sich die MYMDb-CE.jar Datei über Eigenschaften ausführbar machen und damit dann das Prog starten was jetzt aber nicht mehr funktioniert

Du benutzt sowohl die Schreibweise "MYMDb.jar" als auch im Skript "MyMDb.jar". Höchstens eine dieser Möglichkeiten wird richtig sein.

Wechsle bitte das Arbeitsverzeichnis auf den Ordner, in dem die Datei liegt, und zeige für die richtige Schreibweise "XXX" die Ausgabe dieser Befehle:

pwd
ls -l XXX
test -x XXX && echo OK || echo $_ ist nicht ausführbar
which java

Marantkurz

Anmeldungsdatum:
7. September 2023

Beiträge: 802

gelöscht. War auf meins bezogen, dachte, hätte mich verschrieben.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13140

Marantkurz schrieb:

"java -jar" kann den Pfad interpretieren?

Da muss nix interpretiert werden. Die Tilde wird von der Shell, die das Skript ausführt, expandiert zum Pfad des Benutzer-Home-Verzeichnisses.

Hatte schon überlegt das mglw. per java zu machen, aber wenn das doch so gehen sollte..

Keine Ahnung, was Du hier meinst.

"$@" was macht in dem Fall das?

Hängt alle Parameter, die an das Skript übergeben wurden, an die Argumentliste von java hinten an. Für den Fall, das das Java-Programm noch weitere Parameter braucht. Falls keine übergeben werden, wird nix angehängt.

Nochwas: Kann nicht eigentlich der Interpreter auch weg?(oder wegen exec ~/.. "$@", im Fall des abolutem Pfades mglw.? Obwohl, dann wird "-jar .." vmtl. nicht beachtet)

#!/bin/sh

???

exec sorgt lediglich dafür, dass java im selben Prozess ausgeführt wird. Man spart sich einen Prozess.

Dan wäre ja noch die Frage was "java" eigentlich ist, Binary oder (bash/sh) Script.

Das ist egal.

Im 2. Fall wäre es doch sicher egal, ob #!/bin/sh im eigentlichen Script steht oder nicht.(sofern nicht losgelöst)

Nein, denn Du hast dann zwei Ebenen von Skripten. Das zunächst aufgerufene (Deines) braucht eine Shebang genau so wie das danach aufgerufene (java, falls das ein Stykript ist).

Marantkurz

Anmeldungsdatum:
7. September 2023

Beiträge: 802

@rklm

OK, Danke Dir!

"$@"

So auch vermutet, aber da er ja nichts dbzgl. schrieb..

Praxis ergab:

java -jar ~/irgendwas/zu-irgendwas/test.jar

So wie es dasteht, hat gereicht. Also keine Pfad Probleme, wie ich dachte.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17596

Wohnort: Berlin

Stabsgefreiter schrieb:

bash c- cd ~/MyMDb-CE$ java -jar MyMDb-CE.jar

reinkopiert. wenn ich die mdb.sh Datei mit Doppelklick starte, öffnet sich das Terminal, aber das programm wird nicht gestartet

Die Zeile sieht aus, als würdest Du gerne mal Buchstaben vertauschen, Groß-/Kleinfehler machen wie kB gezeigt hat, etc.

1
bash -c cd ~/$MyMDb-CE java -jar MyMDb-CE.jar

sähe schlüssig aus (-c statt c-, $MyMDb statt MyMDb$).

Die Befehle sind aber so essenziell und konventionell - da brauchst Du keinen Bashaufruf für und auch nicht zwingend einen Shebang.

Mit rklm vermute ich, dass Du keinen Verzeichniswechsel benötigst - das hängt aber vom Javaprogramm ab. Wahrscheinlich genügt

1
java -jar ~/MyMDb-CE/MyMDb-CE.jar

Java ist, wenn Du es nicht aus merkwürdigen Quellen bezogen hast (und selbst dann wahrscheinlich) ein Binary.

Wenn Du ein Script per Doppelklick und per Shellaufruf starten kannst, dann prüft man am besten erst in der Shell, weil man da Fehlermeldungen sieht, und wenn es klappt per Doppelklick.

So einen Einzeiler kann man aber, wenn man es später ausschließlich per Klick starten will, auch in den Startercode schreiben - ich vermute bei Deinem Lubuntu hast Du aber keinen eigenen Starter erstellt, aber Lubuntu hat einen Mechanismus Shellskripte in einem neuen Terminal zu öffnen - das ist auch fein.

Dann übergibst Du aber wahrscheinlich keine Parameter und das "$@" ist eine Empfehlung, die Du wahrscheinlich erst später brauchen kannst.

Es könnte nützlich sein, wenn Du Dir anschaust, wie die Fehlermeldungen der Shell für nicht existierende Programme aussehen und wie solche für nicht existierende Dateien und unbekannte Parameter/fehlende Parameter, was bei Legasthenikern wohl die Hauptfehler sind, die häufig passieren, damit Du solche Fehler rasch findest.

Empfehlen kann ich auch shellcheck, ein Programm um Shellskripte auf korrekte Syntax zu checken. Das prüft zwar nicht, ob Dateien bzw. Variablen, die benutzt werden, existieren, aber findet eine hübsche Zahl von Fehlern. Allerdings musst Du auf den Unterschied zw. Fehler und Warnung achten und es hätte Dir bei dem Ausgangskommando nicht geholfen, weder bei c-, noch bei MyMDb-CE$.

Stabsgefreiter

(Themenstarter)
Avatar von Stabsgefreiter

Anmeldungsdatum:
27. Juli 2008

Beiträge: 826

Wohnort: Berlin

ich konnte das Problem mit einer Desktop Datei lösen ( hatte ich noch in meinen Unterlagen gefunden ), ich hatte sowas mal für ein anderes Prog erstellt wo ein ähnliches Prob existierte und enstprechend dann neu angepasst

[Desktop Entry]
Type=Application
Name=MyMDb-CE
Comment=Filmdatenbank
Exec=/home/saturn/MyMDb-CE/mdb.sh
Icon=/home/saturn/MyMDb-CE/Icons/mymdbce.ico
Terminal=false
Categories=Office;X-Xfce-Toplevel;
StartupNotify=false

das hab ich dann unter MYMBb-CE.desktop auf dem Desktop abgespeichert und über Eigenschaften als ausführbar angehakt. Danach liess sich die Filmdatenbank starten Aber vielen Dank fur die Hinweise.

Antworten |