Je veux parcourir les fichiers dans un répertoire avec une boucle for mais cela revient.
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
Mieux 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 la plus simple/la plus courte:
#!/bin/bash
echo "$PWD"
for file; do
[[ -f $file ]] && ((count++))
done
echo $count
J'ai eu le même problème. Enlever #!/bin/bash
a fait l'affaire pour moi. Il semble qu'il n'est pas nécessaire d'ajouter où se trouve bash, car il se trouve sur le chemin du système.
J'ai trouvé une autre solution ici . Changement
#!/bin/bash
for
#!/usr/bin/bash
Dans mon cas, le script bash a été créé sur un PC Windows, ce qui a ajouté 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 seulement LF à l'aide de la variable sed
et mon script fonctionne maintenant.
sed -i 's//\r/\n//\n/g' /path/to/file.sh
Le echo: bad interpreter: No such file or directory
provient probablement de la première ligne, #!...
qui s'appelle Shebang line .
#!...
Cette ligne indique au shell quel interpréteur utiliser pour exécuter le fichier. Cela peut être par exemple bash
, ou sh
(qui est (en gros) un sous-ensemble donc beaucoup de choses ne fonctionneront pas), ou tout ce qui peut exécuter le contenu du fichier - Perl, Python, Ruby, Groovy ...
La ligne pointe le système dans des cas comme appeler le script directement lorsqu'il est exécutable:
./myScript.sh
Il est également souvent utilisé par les éditeurs pour reconnaître la mise en évidence correcte de la syntaxe lorsque le fichier ne possède pas de suffixe - par exemple, Gedit le fait.
Pour remplacer la ligne, alimentez le script avec Bash en tant que paramètre:
bash myScript.sh
Ou bien, vous pouvez le "trouver", ce qui signifie que, à partir d'un shell Bash, effectuez l'une des opérations suivantes:
source myScript.sh
. myScript.sh
ce qui fonctionnera (à peu près) comme si vous aviez collé les commandes vous-même.
Si vous avez utilisé Homebrew pour installer BASH,
Supprimer le #!/bin/bash
.__ sera suffisant.
C'est une erreur étrange à se faire. Je recommande d'essayer de trouver la source de l'erreur.
Une chose est de vérifier la commande pwd.
type pwd
Assurez-vous qu'il s'agit de/usr/bin/pwd ou/bin/pwd et vérifiez qu'il ne s'agit pas d'un script:
file /usr/bin/pwd
Si c'est un script, je parie que ça commence par
#!echo
Vous pouvez trouver où se trouve bash en utilisant la commande
whereis bash
et vous pouvez copier le chemin bash sur le chemin où vous voyez une erreur d’interpréteur incorrect.