Bash Script startet nicht mit OS11.1
Hallo Liste, Für eine "Multiuser"- Umgebung habe ich ein kleines Script gebastelt, damit sich ein Nutzer seine persönlichen E-Mails abrufen kann. Thunderbird ist nur auf zwei Rechnern im Netz installiert, die abgefragt werden. Zum Anmelden und Starten des Thunderbird verwende ich "ssh", weshalb ein Terminal geöffnet werden muss. Das hat bisher auch sehr gut funktioniert, aber seit ich den ersten Rechner auf OS11.1 installiert habe steht folgendes Problem im Raum: Wenn man das Script im Terminal aufruft klappt alles wie immer. Lege ich nun aber im Menü oder auf dem Desktop eine Verknüpfung ab und setze den Haken bei "Im Terminal starten", dann öffnet sich zwar das Terminal, aber dort steht nur "Das Bash- Script ..... kann nicht gestartet werden"! Woran kann das liegen? Bis OS 11.0 hat alles funktioniert! Script => siehe Anhang! -- Mit freundlichen Grüßen Sebastian Reinhardt
Am Donnerstag 06 August 2009 23:10:12 schrieb Sebastian Reinhardt:
Hallo Liste,
Für eine "Multiuser"- Umgebung habe ich ein kleines Script gebastelt, damit sich ein Nutzer seine persönlichen E-Mails abrufen kann. Thunderbird ist nur auf zwei Rechnern im Netz installiert, die abgefragt werden. Zum Anmelden und Starten des Thunderbird verwende ich "ssh", weshalb ein Terminal geöffnet werden muss. Das hat bisher auch sehr gut funktioniert, aber seit ich den ersten Rechner auf OS11.1 installiert habe steht folgendes Problem im Raum: Wenn man das Script im Terminal aufruft klappt alles wie immer. Lege ich nun aber im Menü oder auf dem Desktop eine Verknüpfung ab und setze den Haken bei "Im Terminal starten", dann öffnet sich zwar das Terminal, aber dort steht nur "Das Bash- Script ..... kann nicht gestartet werden"!
Woran kann das liegen? Bis OS 11.0 hat alles funktioniert!
Script => siehe Anhang!
Kann das sein, dass die erste Zeile eigentlich #!/bin/bash heißen müsste (beachte das "!")? Gruß Felix
Am 06.08.2009 23:15, schrieb Felix Lemke:
Am Donnerstag 06 August 2009 23:10:12 schrieb Sebastian Reinhardt:
Hallo Liste,
Für eine "Multiuser"- Umgebung habe ich ein kleines Script gebastelt, damit sich ein Nutzer seine persönlichen E-Mails abrufen kann. Thunderbird ist nur auf zwei Rechnern im Netz installiert, die abgefragt werden. Zum Anmelden und Starten des Thunderbird verwende ich "ssh", weshalb ein Terminal geöffnet werden muss. Das hat bisher auch sehr gut funktioniert, aber seit ich den ersten Rechner auf OS11.1 installiert habe steht folgendes Problem im Raum: Wenn man das Script im Terminal aufruft klappt alles wie immer. Lege ich nun aber im Menü oder auf dem Desktop eine Verknüpfung ab und setze den Haken bei "Im Terminal starten", dann öffnet sich zwar das Terminal, aber dort steht nur "Das Bash- Script ..... kann nicht gestartet werden"!
Woran kann das liegen? Bis OS 11.0 hat alles funktioniert!
Script => siehe Anhang!
Kann das sein, dass die erste Zeile eigentlich #!/bin/bash heißen müsste (beachte das "!")?
Gruß Felix
Oh Gott, ist das peinlich............., aber warum hat das dann seit ca. 2 Jahren klaglos funktioniert...? Egal, Danke. Wie peinlich....., wenn sich nur alle Probleme so schnell lösen ließen.... -- Mit freundlichen Grüßen Sebastian Reinhardt -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Kann das sein, dass die erste Zeile eigentlich #!/bin/bash heißen müsste (beachte das "!")?
Oh Gott, ist das peinlich............., aber warum hat das dann seit ca. 2 Jahren klaglos funktioniert...? Egal, Danke. Wie peinlich....., wenn sich nur alle Probleme so schnell lösen ließen....
Freut mich, dass das doch nur ein Typo war. Braucht dir auch nicht peinlich sein. Weiß auch nicht, warum das vorher funktioniert hat. Vielleicht hat früher SuSE die Skripte nicht einfach so aufgerufen, sondern mit "bash skript.bash", denn damit wird die erste Zeile ignoriert und direkt von der Bash ausgeführt. Gruß Felix
Hallo, Am Don, 06 Aug 2009, Sebastian Reinhardt schrieb:
Am 06.08.2009 23:15, schrieb Felix Lemke:
Am Donnerstag 06 August 2009 23:10:12 schrieb Sebastian Reinhardt: [..]
habe steht folgendes Problem im Raum: Wenn man das Script im Terminal aufruft klappt alles wie immer. Lege ich nun aber im Menü oder auf dem Desktop eine Verknüpfung ab und setze den Haken bei "Im Terminal starten", dann öffnet sich zwar das Terminal, aber dort steht nur "Das Bash- Script ..... kann nicht gestartet werden"! [..] Kann das sein, dass die erste Zeile eigentlich #!/bin/bash heißen müsste (beachte das "!")? [..] Oh Gott, ist das peinlich............., aber warum hat das dann seit ca. 2 Jahren klaglos funktioniert...? Egal, Danke. Wie peinlich....., wenn sich nur alle Probleme so schnell lösen ließen....
Vermutung (ich kenne die konkreten / relevanten (KDE?) Interna nicht): - das alte hat 1. xterm/konsole gestartet 2. darin die default-Shell 3. dieser das Script als Befehl verfüttert 4. die default-Shell guckt, ob in der ersten Zeilen ein relevanter Hash(/She)-Bang-Path ('#!') steht, was hier nicht der Fall ist, also betrachtet die Shell die Datei als Shellscript, was hier passt, und führt es aus - das neue hat 1. xterm/konsole gestartet 2. dem xterm/konsole(!) das Script als Befehl übergeben[1] 3. mangels gültigem Shebang + ohne Shell (s.o.) -> Abbruch [1] Vgl. (ich lag oben also nicht ganz richtig[2]): ==== $ cat /tmp/hello.sh #!/bin/bash echo "Hello World!" sleep 2 $ diff -U0 /tmp/hello.sh /tmp/hello --- /tmp/hello.sh Fri Aug 7 06:00:03 2009 +++ /tmp/hello Fri Aug 7 05:59:43 2009 @@ -1 +1 @@ -#!/bin/bash +#/bin/bash $ chmod 700 /tmp/hello /tmp/hello.sh [Alt+Tab] # strace -f -eprocess xterm -e '/tmp/hello.sh' execve("/usr/bin/xterm", ["xterm", "-e", "/tmp/hello.sh"], [/* 75 vars */]) = 0 fork() = 23259 [pid 23259] execve("/tmp/hello.sh", ["/tmp/hello.sh"], [/* 75 vars */]) = 0 [pid 23259] fork() = 23260 [pid 23260] execve("/bin/sleep", ["sleep", "2"], [/* 72 vars */]) = 0 # strace -f -eprocess xterm -e '/tmp/hello' execve("/usr/bin/xterm", ["xterm", "-e", "/tmp/hello"], [/* 75 vars */]) = 0 fork() = 23263 [pid 23263] execve("/tmp/hello", ["/tmp/hello"], [/* 75 vars */]) = -1 ENOEXEC (Exec format error) [pid 23263] execve("/bin/sh", ["/bin/sh", "/tmp/hello"], [/* 75 vars */]) = 0 [pid 23263] fork() = 23264 [pid 23264] execve("/bin/sleep", ["sleep", "2"], [/* 72 vars */]) = 0 $ rm /tmp/hello /tmp/hello.sh ==== Man beachte, daß bei '/tmp/hello' _nicht_ die /bin/bash aufgerufen wird, sondern die default-Shell /bin/sh. Das oben vermutete Verhalten erklärt sich aus den Unterschieden der beiden 'strace', wo mein altes 'xterm' (aus XFree86 3.3.6!) mal eben eine /bin/sh startet und der das script nochmal verfüttert, was das aktuelle xterm / konsole o.ä. nicht mehr tut. Konkret: Die Reaktion des xterm auf das 'execve() = -1 ENOEXEC' ist "neu" wohl anders (d.h. keine /bin/sh zu forken) und ist IMO sinnvoll. Hach! Ich liebe Tools wie strace/ltrace usw. einfach :)) Kann einem einiges Quelltexte lesen ersparen ... -dnh, der so schon manchem "Mysterium" auf die Spur kam ;) [2] ja, das hab ich erst geschrieben und dann das mit strace ausprobiert. Wäre sonst ja auch langweilig ;) -- Fighting for peace is like fucking for virginity. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
David Haller
-
Felix Lemke
-
Sebastian Reinhardt