PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : : bad interpreter: No such file or directory



UWI2K2
05.06.2003, 14:41
hi,
ich bin absolut neu in shell,
habe bisher php gecoded und auf den ersten blick würd ich sagen das es da nicht so viel unterschiede gibt.

ich habe mir so nen mini test script geschrieben um mal nen einstieg zu bekommen, aber es scheitert schon an der ersten zeile.

#!/bin/bash
include 'http://www.2-advanced-media.de/weiter';
echo UWI is on;


Folge:
: bad interpreter: No such file or directory

ich habe es auch mit #!/bin/sh versucht klappt aber au net.
überall in der tuts wird gar nicht auf #!/bin/bash eingegangen da die davon ausgehen das es funz.....

also woran kann das liegen ???
in /bin/ ist die bash datei drin also daran kann es net liegen....


Danke schonmal

hopfe
05.06.2003, 15:03
Es liegt vielleicht an deinen Include, versuche mal " anstatt von ' zu verwenden.

etuli
05.06.2003, 15:05
man sh

ansonsten mal schauen, ob bash, oder sh ueberhaupt in /bin existiert.

UWI2K2
05.06.2003, 15:29
danke erstmal,
aber wie gesagt alle dateien sind da.
und am " des include kann es ja nu nicht liegen das er den interpreter net findet...
hat noch jemand ne idee

ExRevel
05.06.2003, 16:13
Hi...

also dein script funktioniert insofern das er das echo ausgibt! "include" kennt bash bei mir nicht. Wie startest du denn? schreib doch einfach:

bash script.sh

dann muss es ja gehen! :) wenn er per ./script.sh nix findet

ciao Exi

chb
05.06.2003, 17:24
Original geschrieben von UWI2K2


#!/bin/bash



das stimmt schon - bash muß eigentlich im bin sein sonst könntest dich schwer einloggen - es sei denn du nimmst nicht bash als shell ...

sonst mach mal which bash und schau wo bash iss ...




include "http://www.2-advanced-media.de/weiter"


Bash kennt kein include -> der befehl lautet source und der interpretiert die datei nur als Ausführbar daher er nimmt Variablen und Funktionen bzw den Dateioutput her - bei einzelnen Datein geht das mit


TESTVARIABLE=$(uname -a)


das schreibt die Ausgabe von uname in die Variable TESTVARIABLE.




echo "UWI is on"



jo das gibt dir den Zeichensatz auf dem Bildschirm aus .. echo -n "asdf"
macht dir eine Newline am schluß drann ..


und die ";" Zeichen würden im script nicht sehr viel helfen da ; einfach zum nächsten Befehl übergeht egal was passiert .. mit "&&" kann man zb eine Zeile ausführen und nur dann weitergehn wenn der Vorherige befehl richtig und ohne Fehler ausgeführt wurde zb

make && make install

dann würde er wenn make nicht funzt nicht mehr make install ausführen

http://linuxsig.org/files/bash_scripting.html -> kleine Übersicht

Steve
05.06.2003, 19:57
hast du vorher "chmod +x script.sh" gemacht ?


Steve

ConCode
06.06.2003, 13:20
Also ich verstehe auch nicht was du mit dem include bezwecken willst! soll das ein CGI werden?

Die anwendungsgebiete von bash-scripten und php scripten sind doch total unterschiedlich!!!

Was willst du machen?

Belkira
06.06.2003, 23:05
Wende mal "dos2unix" auf Dein Skript an.

/dev/tty0
30.07.2005, 14:58
Hi!

Ich hatte nach der Neuinstallation von SuSE 9.3 das gleiche Problem mit einem Skript. Nach einigem Knobeln bin ich drauf gekommen:
Das Flag "user_xattr" war für die betroffenen Partitionen nicht gesetzt und dann werden erweiterte Datei-Parameter wie z.B. Ausführbarkeit nicht interpretiert. Über Yast (SuSE) solltest Du unter "System -> Partitionen" für die entsprechenden Partitionen unter Fstab-Optionen "Erweiterte Benutzerattribute" aktivieren. ...oder aber, Du ergänzt in /etc/fstab einfach user_xattr bei den Partitionen, bei denen es noch nicht vorhanden ist.

Grüsse!

bobo
16.04.2006, 18:21
Hi!

Ich hatte nach der Neuinstallation von SuSE 9.3 das gleiche Problem mit einem Skript. Nach einigem Knobeln bin ich drauf gekommen:
Das Flag "user_xattr" war für die betroffenen Partitionen nicht gesetzt und dann werden erweiterte Datei-Parameter wie z.B. Ausführbarkeit nicht interpretiert. Über Yast (SuSE) solltest Du unter "System -> Partitionen" für die entsprechenden Partitionen unter Fstab-Optionen "Erweiterte Benutzerattribute" aktivieren. ...oder aber, Du ergänzt in /etc/fstab einfach user_xattr bei den Partitionen, bei denen es noch nicht vorhanden ist.

Grüsse!

Ich hab das Problem auch, trau mich aber nicht so recht dran dieses Flag zu setzen ohne den Server gleich komplett zu schrotten.

Ich habe eine Suse Linux 9.3 als Raid1.

Kann mir da bitte einer aufschreiben wie ich genau vorgehen muß.
Bei mir funktionieren nämlich auch keine Perlskripte, das Script ist aber in Ordnung

perl -wc script.pl

Kam OK


/dev/md0 / ext3 usrquota,grpquota 1 1
/dev/sda1 swap swap pri=42 0 0
/dev/sdb1 swap swap pri=42 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0


Also wenn ich den Befehl so eingebe funktioniert das ganze.

/usr/bin/perl ./script.pl

oder

perl ./script.pl

Da muß doch ne Pfadangabe irgendwo fehlen oder ?


Wenn das über den Browser nicht geht, kann das auch ein Rechteproblem sein, wenn ja wie löse ich das ?

Gruß
bobo

Wolfgang
16.04.2006, 20:24
Hallo

Zwischen php (Webanwendung Scriptsprache) und der shell liegen Welten!
- Das Script muss ausführbar sein.
- Die shebang (erste Zeile) muss eindeutig auf den interpreter verweisen.
- Das Script darf keine syntaktischen Fehler beinhalten.

include ist kein Bashbefehl.

echo -n "bla fasel" verhindert die angefügte Newline

Wenn das Script auf einer Partition ausgeführt werden soll, die mit noexec gemountet ist, geht es nicht.

Dazu muss lediglich in der fstab die Option exec hinzugefügt werden, bzw noexec entfernt werden.

Wenn das Script über den Interpreter aufgerufen wird, brauchst du keine shebang, und der Speicherort ist egal.

Gruß Wolfgang

bobo
16.04.2006, 20:32
Die Datei kann ich zwischenzeitlich über die Konsole ausführen, nur über die URL geht es nicht.

Also nach einer Behandlung unix2dos geht es über Konsole

./script.pl

Die Datei wird mir beim Aufruf über den Browser immer nur zum download angeboten :(

Ich bekomme wenn ich die Datei ins Standardverzeichnis cgi-bin kopiere

Serverfehler!
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.

Fehlermeldung:
Premature end of script headers: script.pl

Könnte das auch ein Rechteproblem sein ?

in suexec.log steht das hier

uid (638/web1) gid: (104/104) cmd: script.pl
target uid/gid (636/104) mismatch with directory (636/104) or programm (636/0)

Mµ*e^13.5_?¿
16.04.2006, 21:11
Steht am anfang vom script auch das obligatorische
print "Content-type: text/html\n\n";
?

bobo
16.04.2006, 21:41
nein

#! /usr/bin/perl

my @ids=qw/11 22 33 44 55 66 77/;

sub main();
sub main() {
my $time=time;

print "Content-type: text/plain\n\n";
print "O\n";
print "H\tpid\tnick\tasof\n";
print "D\t12345678\tUNLOCKED\t$time\n";
print "H\tenlisted\tofficer\n";
print "D\t0\t0\n";
print "H\tid\tstate\n";
for (@ids) {
print "D\t$_\ts\n";
}
print "\$\t103\t\$\n";
}

main();

Wolfgang
16.04.2006, 22:01
Hallo

Deine Frage hat aber nix mit der shebang oder Interpreter eines Shellscriptes zu tun.
Was du willst, ist ein Perlscript über einen CGI Interpreter eines Webserver laufen zu lassen.
Der Header endet mit dem doppelten Newline \n\n

Das Script ist sicher nicht von dir oder?
Was willst du damit bewirken?

HTML wird hier nicht ausgegeben.

Die Funktionen sind sinnlos, solange sie nicht aufgerufen werden.

Hast du für den Webserver die richtigen Handler gesetzt, und die Ausführungsrechte richtig eingestellt?

Bei dir geht es um ein Konfigurationsproblem, des Webserver. Das hat mit Shell nix zu tun.
Abgesehen davon, ist das Script fehlerhaft.
Was macht die Funktion main() ;?
Du definierst ein Array, dann deklarierst du eine Funktion, die du anschließend definierst ohne sie aufzurufen.

Wenn du da weiterkommen willst, kommst du nicht umhin, dich mit Webserverkonfiguration, perl und cgi zu beschäftigen.

Gruß Wolfgang
PS wenn unix2dos etwas bewirkt verwendest du kein Linux!
Das ist hier nicht OT