2013-03-31 15 views
8

Ich möchte durch die Dateien in einem Verzeichnis mit einer for-Schleife gehen, aber das kommt auf.Shell-Skript: schlechter Interpreter: Keine solche Datei oder Verzeichnis bei der Verwendung von Pwd

echo: bad interpreter: No such file or directory 

Code:

#!/bin/bash 
count=0 
dir=`pwd` 
echo "$dir" 
FILES=`ls $dir` 
for file in $FILES 
do 
if [ -f $file ] 
then 
    count=$(($count + 1)) 
fi 
done 
echo $count 
+0

Das erste Echo zeigt nur das Verzeichnis das letzte ist für den Zähler – Alek

+1

Haben Sie tatsächlich Ihren Code kopieren/einfügen? Was Sie dort haben, hat einen Syntaxfehler in der 'if' Zeile. – Mat

+0

hat gerade den fehlenden leeren Platz repariert .. der gleiche Fehler tritt auf – Alek

Antwort

5

besser:

#!/bin/bash 
count=0 
dir="$PWD" 
echo "$dir" 

for file in "$dir"/* 
do 
if [[ -f $file ]] 
then 
    ((count++)) 
fi 
done 
echo $count 

oder eine einfachste/kürzeste Lösung:

#!/bin/bash 

echo "$PWD" 

for file; do 
[[ -f $file ]] && ((count++)) 
done 

echo $count 
+0

Vielen Dank für die Hilfe, die ich den Code in einer anderen Datei redid und behoben die if [] .. meine Vermutung ist, dass die ursprüngliche Datei wurde beschädigt – Alek

+0

In diesem Fall '" $ dir "/ *' könnte abgekürzt werden mit './* 'oder nur' * ', da die Variable das aktuelle Arbeitsverzeichnis enthält. –

+0

Siehe meine neue 'einfachste/kürzeste Lösung' –

1

Das ist ein seltsamer Fehler ist, zu bekommen. Ich empfehle zu versuchen, die Quelle des Fehlers zu finden.

Eine Sache ist es, den Pwd-Befehl zu überprüfen.

type pwd 

Stellen Sie sicher, es ist/usr/bin/pwd oder/bin/pwd, und stellen Sie sicher, es ist kein Skript:

file /usr/bin/pwd 

Wenn es ein Skript, ich wette, es beginnt mit

#!echo 
+0

' pwd' ist ein bash builtin: 'type -a pwd' –

+0

Normalerweise ist das wahr. Etwas verursacht den "Echo: schlechten Interpreter: Keine solche Datei oder Verzeichnis". Der einzige Weg, den ich jemals "Bad Interpreter" gesehen habe, ist die Ausführung eines Shell-Skripts mit einem schlechten Pfad in der '#!/Path' Zeile. – ash

12

Ich hatte das gleiche Problem. Entfernen #!/bin/bash hat den Trick für mich getan. Es scheint, dass es nicht notwendig ist hinzuzufügen, wo Bash befindet, da es auf dem Systempfad ist.

Ich fand eine andere Lösung here. Ändern

#!/bin/bash

für

#!/usr/bin/bash

0

Wenn Sie Homebrew verwendet haben zu BASH installieren,

das Entfernen #!/bin/bash genügt sein.

0

Sie finden können, wo bash

Befehl befindet sich
whereis bash 

und Sie können den bash-Pfad auf den Pfad kopieren, in dem Sie sich schlecht-Interpreter Fehler sehen.

1

In meinem Fall wurde das Bash-Skript auf einem Windows-PC erstellt, der vor jedem Zeilenvorschub ein Wagenrücklaufzeichen eingefügt hat. \ x0D \ x0A statt nur \ x0A. Ich habe alle CRLF nur mit LF ersetzt, indem ich sed benutze und mein Skript funktioniert jetzt.

+0

Ich denke, ich habe das gleiche Problem, ich sehe "\ r" nicht gefunden Instanzen. Können Sie mir sagen, wie Sie das mit dem Befehl sed umsetzen können? – DNAngel

+0

@DNAngel 'sed -i 's // \ r/\ n // \ n/g' /pfad/zu/datei.sh ' – fahadash