web-dev-qa-db-fra.com

shell script: interpréteur incorrect: aucun fichier ni répertoire de ce type 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
10
Alek

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
5
Gilles Quenot

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

18
Marco Navarro

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
2
fahadash

Le echo: bad interpreter: No such file or directory provient probablement de la première ligne, #!... qui s'appelle Shebang line .

À 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 (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.

Solution

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.

2
Ondra Žižka

Si vous avez utilisé Homebrew pour installer BASH,

Supprimer le #!/bin/bash.__ sera suffisant.

1
Mohamed Anees A

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
1
ash

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.

0
Jyoti Dhiman