Question

I want to go through the files in a directory with a for loop but this comes up.

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
Was it helpful?

Solution 2

Better do :

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

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

or a simplest/shortest solution :

#!/bin/bash

echo "$PWD"

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

echo $count

OTHER TIPS

I had the same problem. Removing #!/bin/bash did the trick for me. It seems that is not necessary to add where bash is located, since it is on the system path.

I found another solution here. Change

#!/bin/bash

for

#!/usr/bin/bash

The echo: bad interpreter: No such file or directory is most likely coming from the first line, #!... which is called shebang line.

About the #!... line

This line hints the shell what interpreter to use to run the file. That can be e.g. bash, or sh (which is (roughly) a subset so a lot of things won't work), or basically anything that can execute the file content - Perl, Python, Ruby, Groovy...

The line points the system in cases like calling the script directly when it's executable:

./myScript.sh

It is also often used by editors to recognize the right syntax highlighting when the file has no suffix - for instance, Gedit does that.

Solution

To override the line, feed the script to Bash as a parameter:

bash myScript.sh

Or, you can 'source' it, which means, from within a Bash shell, do either of

source myScript.sh
. myScript.sh

which will work (roughly) as if you pasted the commands yourself.

In my case the bash script was created on a Windows PC which added a carriage return character in front of every line feed. \x0D\x0A instead of just \x0A. I replaced all the CRLF with just LF using the sed and my script works now.

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

I have just come across the same issue and found that my error was in my first line, having

#!bin/bash

instead of

#!/bin/bash

That's a strange error to be getting. I recommend trying to find the source of the error.

One thing is to check the pwd command.

type pwd

Make sure it's /usr/bin/pwd or /bin/pwd, and verify it's not a script:

file /usr/bin/pwd

If it is a script, I bet it starts with

#!echo

If you did use Homebrew to install BASH,

Removing the #!/bin/bash will be suffice.

You can find where bash is located using command

whereis bash

and you can copy the bash path to the path where you are seeing bad-interpreter error.

I have followed the steps from the following link and issue has been resolved.

Ref link: script error - bad interpreter Actually, there was an extra ^M symbol at the end of each line. So, after the removal of that, it worked fine for me.

Hope it helps!

This issue could also occur when the file is not in unix format.. try running dos2unix againts the file and try again.

so, if you change your username group priority from username to root, you should change

#!/user/bin/bash

to

#!/bin/bash

check your user group (my username is rommi)

$ groups rommi

this command will output:

rommi : root adm cdrom sudo dip plugdev lxd lpadmin sambashare

since my username group priority is set to root, i should change my script to

#!/bin/bash

i change the priority group using:

sudo usermod -g root rommi

if groups rommi command outputs:

rommi : rommi adm cdrom sudo dip plugdev lxd lpadmin sambashare

then my script should use #!/usr/bin/bash

fail make this changes will resutl in bad interpreter: No such file or directory error

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top