19 votes

shell script : mauvais interpréteur : Aucun fichier ou répertoire de ce type lors de l'utilisation de pwd

Je veux parcourir les fichiers d'un répertoire avec une boucle for, mais voici ce qui se passe.

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

28voto

Marco Navarro Points 385

J'ai eu le même problème. Suppression de #!/bin/bash a fait l'affaire pour moi. Il semble qu'il ne soit pas nécessaire d'ajouter où se trouve bash, puisqu'il est sur le chemin du système.

J'ai trouvé une autre solution aquí . Modifier

#!/bin/bash

pour

#!/usr/bin/bash

8voto

sputnick Points 31663

Mieux vaut le faire :

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

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

ou une solution plus simple/plus courte :

#!/bin/bash

echo "$PWD"

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

echo $count

8voto

Ondra Žižka Points 8262

El echo: bad interpreter: No such file or directory vient très probablement de la première ligne, #!... qui s'appelle ligne shebang .

A propos de la #!... ligne

Cette ligne indique au shell quel interpréteur utiliser pour exécuter le fichier. Cela peut être par exemple bash ou sh (qui est (grossièrement) un sous-ensemble donc beaucoup de choses ne fonctionneront pas), ou en gros tout ce qui peut exécuter le contenu du fichier - Perl, Python, Ruby, Groovy....

La ligne pointe le système dans des cas comme l'appel du script directement lorsqu'il est exécutable :

./myScript.sh

Il est également souvent utilisé par les éditeurs pour reconnaître la bonne coloration syntaxique lorsque le fichier n'a pas de suffixe - par exemple, Gedit le fait.

Solution

Pour remplacer la ligne, envoyez le script à Bash en tant que paramètre :

bash myScript.sh

Ou bien, vous pouvez le "sourcer", ce qui signifie, à partir d'un shell Bash, faire l'une des deux choses suivantes

source myScript.sh
. myScript.sh

qui fonctionnera (en gros) comme si vous aviez collé les commandes vous-même.

5voto

fahadash Points 1778

Dans mon cas, le bash script a été créé sur un PC Windows qui ajoutait un caractère de retour chariot devant chaque saut de ligne. \x0D\x0A au lieu de simplement \x0A. J'ai remplacé tous les CRLF par un simple LF en utilisant la fonction sed et mon script fonctionne maintenant.

sed -i 's//\r/\n//\n/g' /path/to/file.sh

5voto

David Points 71

Je viens de rencontrer le même problème et j'ai découvert que mon erreur se trouvait dans ma première ligne, ayant

#!bin/bash

au lieu de

#!/bin/bash

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X