Shell Inkompatibilitäten?

marrb

Mitglied
Thread Starter
Dabei seit
20.01.2006
Beiträge
30
Reaktionspunkte
0
Ich möchte ein Skript ausführen, das mit der Zeile
#!/bin/sh
beginnt. Ich bekomme dabei immer die Rückmeldung, dass das File nicht existiert (no such file or directory). (Das File existiert aber ganz sicher) Wenn ich versuche, als Root das Skript auszuführen, sieht die Fehlermeldung so aus:
martin-imac:/Users/martin/Desktop root# ./backup_home
/bin/echo: bad interpreter: No such file or directory

Das scheint für mich darauf hinzudeuten, dass irgendwas mit der Shell nicht stimmt. Kann es sein, dass das Standardterminal eine andere Shell nutzt als die, die versuche aufzurufen und es dann knallt? Was könnte sonst das Problem sein? Bin für jeden Tipp dankbar!

Gruß Martin
-----------------------------
iMac G5 mit OS X 10.4.6
 
Hi,
kannst Du mal das ganze Script posten? Der Fehler deutet eher darauf hin, dass er "echo" als Interpreter nutzen will. Ansonsten solltest Du auch die "sh" als Shell für das Script nutzen können. Das muss ein anderer Fehler sein. Also entweder überprüfst Du nochmal die oberen Zeilen Deines Scriptes oder postest es nochmal.

gruss
 
Führe Dein Shell-Script einmal mittels

Code:
sh -x ./backup_home

aus. Dann siehst Du, welches Deiner enthaltenen Konstrukte den Fehler wirft.
 
Das Script, das ich ausführen möchte, ist direkt aus den rsync-Backup "Tipps und Tricks" kopiert und sieht so aus:

#!/bin/sh

#Variablen fuer die Pfade
declare quelle="$HOME"
declare ziel="<ziel>"

#Log schreiben (Anfangszeit)
/bin/echo "Backup begonnen um:" >> $ziel/backup.log
/bin/date >> $ziel/backup.log

#Backup ausführen und protokollieren
/usr/bin/time /usr/bin/rsync -avE $quelle/ $ziel/ > $ziel/protokoll.log

#Log schreiben (Endzeit)
/bin/echo "Backup beendet um:" >> $ziel/backup.log
/bin/date >> $ziel/backup.log
/bin/echo "--------------------------------------" >> $ziel/backup.log

Bei den anderen Usern scheint das zu funktionieren, bei mir geht irgendwas schief....
Den Hinweis mit dem -x Parameter kann ich leider erst heute Abend probieren, werde das Ergebnis dann gleich weitergeben.
Danke Martin
 
declare ziel="<ziel>"

da ist dein problem...
du hast das ziel nicht richtig gesetzt....
so kann das auch nicht klappen
 
Öffne mal ein terminal und drücke "⌘," anschließend sag mir, welche Schell bei dir läuft!

Vielleicht hilft uns das weiter...

Edit: @ oneOeight: Dann würde er eine andere Fehlermeldung bekomen und zwar genauso:
./test.sh: line 8: <ziel>/backup.log: No such file or directory
./test.sh: line 9: <ziel>/backup.log: No such file or directory
./test.sh: line 12: <ziel>/protokoll.log: No such file or directory
./test.sh: line 15: <ziel>/backup.log: No such file or directory
./test.sh: line 16: <ziel>/backup.log: No such file or directory
./test.sh: line 17: <ziel>/backup.log: No such file or directory
 
Noch einen Nachtrag für den TE: versuch mal die besagte Datei direkt in der Shell auszuführen also

/bin/echo "Hello World"
 
Also wenn ihr mich fragt steckt in dem Shell-Skript irgendwo einfach ne Escape-Sequenz drin wo sie nicht hin gehört. Dann kriegt man nämlich genau solche Fehlermeldungen.

Ich würde die Zeilen mit dem Echo einfach mal neu tippen.
 
dann würde es doch hier stehen, er hat ja das script hier aus dem Forum 1:1 kopiert anschließend per chmod 744 startfähig gemacht und ausgeführt.

Wenn er ne ESC Sequenz drinnen hätte, müsste die dann nicht im Post weiter oben sichtbar sein?
 
Hallo oneOeight,
declare ziel="<ziel>"

da ist dein problem...
du hast das ziel nicht richtig gesetzt....
so kann das auch nicht klappen

da ich grade nicht an meinem Rechner sitze, habe ich nur das Template aus dem Forum rüberkopiert, ohne den Platzhalter zu ersetzen. In meiner realen Skript steht da natürlich der echte Pfad (den ich auch getestet habe).
Martin
 
marrb, poste mal das echte Script, vl hast wirklich wo einen Hund reingewürgt ;)
 
TrusterX schrieb:
Öffne mal ein terminal und drücke "⌘," anschließend sag mir, welche Schell bei dir läuft!

Welchen Unterschied sollte das machen? Das Script läuft unter /bin/sh. Ich sehe keinen Zusammenhang zum Vaterprozeß.
 
marrb schrieb:
/bin/echo: bad interpreter: No such file or directory

Schuß ins Blaue: Du hast die Datei unter irgendeinem Fremd-OS erstellt und von dort die Zeilentrennung übernommen, d.h. Deine Zeilen sind nicht durch 0x0a terminiert.

Was sagt

Code:
hexdump backup_home
 
Ok, Problem gelöst, vielen Dank!
Ich habe die Datei mit dem Programm TextEdit erstellt, und obwohl ich es mit "in reinen Text umwandeln" als Text gespeichert habe, waren die Zeilenumbrüche im VI Editor eben keine normalen Zeilenumbrüche. Da stand "^M" an der Stelle, wo eigentlich die neue Zeile beginnen sollte. Nach der Korrektur mit VI läuft das Skript jetzt einwandfrei.
DANKE

Martin
 
ähm TextEdit? was isn das, kann man das essen?

Wenn du VI/VIM beherrscht, kannst die endgeilsten Sachen damit machen, dann wirst du nie was anderes verwenden wollen.

Ich bin eigendlich davon ausgegangen, dass jeder VI verwendet, wenns um Konsolenspezifische Sachen geht, mein Fehler :D
 
Zuletzt bearbeitet:
Nachtrag: du hast vermutlich mit TextEdit NICHT ASCII-Codiert abgespeichert, wodurch der Text nicht shelltauglich ist.

Muss man aber auch erst aktivieren über die Optionen, voher kannst sie nicht auswählen
 
TrusterX schrieb:
ch bin eigendlich davon ausgegangen, dass jeder VI verwendet, wenns um Konsolenspezifische Sachen geht, mein Fehler :D
Schmarrn. Viele Wege fuehren nach Rom.

BBEdit, jedit, Eclipse, pico, nano, mcedit - die ganz Harten kommen mit touch, echo und sed immer in den Garten... :-"

Gruss von IceHouse
 
... nicht zu vergessen, der gute alte 'ex', wenn man es unbeding haarig will ;).
 
TrusterX schrieb:
Nachtrag: du hast vermutlich mit TextEdit NICHT ASCII-Codiert abgespeichert, wodurch der Text nicht shelltauglich ist.
Doch! Ich habe "in reinen Text umwandeln" ausgewählt. Außer dem vermurksten Zeilenumbruch waren keine Formatierungsbefehle mit VI sichtbar.
 
Zurück
Oben Unten