staging.inyokaproject.org

bash: ./script.sh: /bash: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

kopeter

Avatar von kopeter

Anmeldungsdatum:
9. Juli 2013

Beiträge: 124

Folgende Mitteilung verhindert ein Ausführen des Skripts

1
2
peter@Laotse:~/Dokumente/test$ ./script.sh
bash: ./script.sh: /bash: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden

Das Skript selber hat merlin1987 hier https://forum.ubuntuusers.de/topic/imagemagick-funktioniert-nicht-2/2/ gepostet und wurde von mir nur im Hinblick auf die Variable imagetype (png statt jpg) verändert

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
#

#######################
# VARIABLE: umzuwandelnder Dateityp
imagetype="png"
#######################

# Name der Ausgabedatei
read -p "Name der neuen PDF-Datei? :" newname;

# alle Bilder in PDF umwandeln
for i in *.${imagetype} ; do convert "$i" "$i.pdf"; done;

# erzeugte PDF-Dateien zusammenfassen
mutool merge -o $newname.pdf *.pdf

# temporäre PDF Dateien wieder löschen
for i in *.${imagetype} ; do rm -f "$i.pdf"; done;
echo "Konvertierung abgeschlossen. PDF-Datei ${newname}.pdf erzeugt.";

exit

die Bash ist installiert, daran solltes also nicht liegen

1
2
$ echo $SHELL
/bin/bash

hat einer ne Idee?

Gruß kopeter

Saddy

Anmeldungsdatum:
2. Mai 2006

Beiträge: 1148

kopeter

(Themenstarter)
Avatar von kopeter

Anmeldungsdatum:
9. Juli 2013

Beiträge: 124

Ich habe aus dem genannten Betrag folgenden Versuch unternommen: Ich bin mir nicht sicher was das Bedeutet

peter@Laotse:~/Schreibtisch/Test$ dos2unix -v /home/peter/Schreibtisch/Test/*.sh
dos2unix: Es wurden 0 von 2 Zeilenumbrüchen umgewandelt.
dos2unix: Datei /home/peter/Schreibtisch/Test/script.sh wird ins Unix-Format umgewandelt …
peter@Laotse:~/Schreibtisch/Test$ ./script.sh
bash: ./script.sh: /bash: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
peter@Laotse:~/Schreibtisch/Test$ 

Bis auf die Tatsache das es nichts gebracht hat ☹ Die Umwandlung bei Bildern hat zur Folge dass die garnichtmehr funzen.

Ich habe die Dateien jetzt zu Testzwecken auch lokal auf dem Schreibtisch gespeichert, normalerweise sind sie über SSHFS und Bind vom Nas eingebunden. Falls das den Fehler nicht ausschließt, hier ein Auszug aus der fstab:

sshfs#peter@SYNNAS:/pack/     /home/peter/.pack       fuse uid=1000,gid=100,umask=0,allow_other,_netdev 0 0
//SYNNAS:/pack/ 	        /home/peter/.nfsPack       nfs nfsvers=4,rw                                  0 0
/home/peter/.pack/Dokumente    /home/peter/Dokumente   none bind,_netdev                                 0 0 

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Die einzige Diskrepanz die ich erkenne, ist, dass die Fehlermeldung sagt:

1
bash: ./script.sh: /bash: Defekter Interpreter:

aber Dein Code sagt

1
#!/bin/bash
  • wieso sollte die Shell uns was vormachen, was den Pfad zur bash betrifft?

Ein kleiner Selbsttest:

1
2
3
4
t530:~/proj/mini/forum 🐧> head -n1 ./def-int-bash.sh 
#!/bash
t530:~/proj/mini/forum 🐧> ./def-int-bash.sh 
bash: ./def-int-bash.sh: /bash: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden

Wenn man /bash schreibt, bekommt man /bash bzw. einen Fehler, weil das nix ist, wenn man /bin/bash schreibt, bekommt man /bin/bash.

Wir lernen zweierlei:

  1. Der Pfad im Shebang muss stimmen.

  2. Wenn man die Beweise fälscht, hat man den Fehler schon gefunden. Das, was man fälscht, ist der Fehler. 😉

Nachtrag zum Script folgt.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Nachtrag:

1
2
3
4
5
# temporäre PDF Dateien wieder löschen
for i in *.${imagetype} ; do rm -f "$i.pdf"; done;
echo "Konvertierung abgeschlossen. PDF-Datei ${newname}.pdf erzeugt.";

exit

Nur 3 Kleinigkeiten.

Was soll das "-f" bei rm?

Was soll das Semikolon am Ende der Zeilen? Du brauchst ein Semikolon zum Abschluss eines Kommandos (sofern dieses keinen anderen Abschluss hat), wenn in der gleichen Zeilen ein weiterer Befehl folgt. Bashcode ist nicht C, Java oder dgl.

Die ganzen Semikolons am Zeilenende können weg.

Exit am Fileende ist auch überflüssig. Auf einem Papier steht auch nicht "Ende" am unteren Rand und doch ist es zuende. Das kann einfach weg. Exit brauchst Du, um vorzeitig ein Programm zu verlassen, bspw. wenn Du einen Fehler festgestellt hast, der nicht vom Programm behoben werden kann (keine Internetverbindung, no space left on device, fehlende Berechtigung für einen Programmaufruf u.dgl.).

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

Überprüfe, ob in der ersten Zeile keine unerwünschten nicht druckbaren Zeichen stehen. Versuche z.B.:

head -n 2 script.sh | hd 

kopeter

(Themenstarter)
Avatar von kopeter

Anmeldungsdatum:
9. Juli 2013

Beiträge: 124

der Fehler wurde gefunden.. ich hab eine andere Datei verbessert als getestet 😳 in der getesteten stand tatsächlich der falsche Pfad zur bash

allerdings tut das Programm immernoch nicht was es soll :/ ich werde dazu einen neuen Beitrag eröffnen, falls ich es nicht selbst beheben kann, damit die Suche das Problem findet.

vielen Dank

Antworten |