![](https://seccdn.libravatar.org/avatar/363424a7062b0e7a90527600f3760d46.jpg?s=120&d=mm&r=g)
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