Reputation: 329
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
Upvotes: 27
Views: 148814
Reputation: 1306
Solutions provided above mostly work, but changing
#!/bin/bash
to
#!/usr/bin/bash
is not always feasible. Because you dont know how many location this shebang is being called. One simple hack is to create a symlink. Get location of current bash.
which bash
/usr/bin/bash
Create a soft link
ln -s /usr/bin/bash /bin/bash
It should work like a charm.
Upvotes: 0
Reputation: 1
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
Upvotes: 0
Reputation: 103
This issue could also occur when the file is not in unix format.. try running dos2unix againts the file and try again.
Upvotes: 2
Reputation: 111
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
Upvotes: 6
Reputation: 1619
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!
Upvotes: 2
Reputation: 46904
The echo: bad interpreter: No such file or directory
is most likely coming from the first line, #!...
which is called shebang line.
#!...
lineThis 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.
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.
Upvotes: 14
Reputation: 3281
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
Upvotes: 5
Reputation: 568
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.
Upvotes: 1
Reputation: 4601
If you did use Homebrew to install BASH,
Removing the
#!/bin/bash
will be suffice.
Upvotes: 2
Reputation: 485
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
Upvotes: 38
Reputation: 5165
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
Upvotes: 1
Reputation: 185640
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
Upvotes: 8