script shell: mauvais interpréteur: pas de fichier ou répertoire lors de l’utilisation de pwd

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 .

A propos de la ligne #!...

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.

Solution

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.