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 vaut 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
fait l’affaire pour moi. Il semble que ce n’est pas nécessaire d’append où se trouve bash, car il se trouve sur le chemin du système.
J’ai trouvé une autre solution ici . Changement
#!/bin/bash
pour
#!/usr/bin/bash
C’est une erreur étrange à obtenir. 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
Si vous avez utilisé Homebrew pour installer BASH,
Supprimer le #!/bin/bash
sera suffisant.
Dans mon cas, le script bash a été créé sur un PC Windows qui a ajouté un caractère de retour chariot à chaque saut de ligne. \ x0D \ x0A au lieu de simplement \ x0A. J’ai remplacé tous les CRLF par juste LF en utilisant sed
et mon script fonctionne maintenant.
Vous pouvez trouver où se trouve bash en utilisant la commande
whereis bash
et vous pouvez copier le chemin bash vers le chemin où vous voyez une erreur d’interpréteur incorrect.
L’ echo: bad interpreter: No such file or directory
provient probablement de la première ligne, #!...
qui s’appelle la ligne de shebang .
#!...
Cette ligne indique au shell quel interpréteur utiliser pour exécuter le fichier. Cela peut être bash
, sh
qui est (grosso modo) un sous-ensemble, donc beaucoup de choses ne fonctionneront pas, ou essentiellement tout ce qui est compatible – Perl, Python …
La ligne pointe le système dans des cas tels que l’appel direct du script lorsqu’il est exécutable:
./myScript.sh
Il est également souvent utilisé par les éditeurs pour reconnaître la mise en évidence de la syntaxe lorsque le fichier n’a pas de suffixe – par exemple, Gedit le fait.
Pour remplacer la ligne, alimentez le script en Bash en tant que paramètre:
bash myScript.sh
Ou, vous pouvez le «source», ce qui signifie, à partir d’un shell Bash, faire l’un ou l’autre
source myScript.sh . myScript.sh
qui fonctionnera (grossièrement) comme si vous avez collé les commandes vous-même.