Alek
Alek

Reputation: 329

shell script: bad interpreter: No such file or directory when using pwd

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

Answers (12)

iamattiq1991
iamattiq1991

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

Rommi
Rommi

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

Ren Roz
Ren Roz

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

David
David

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

Vikash Choudhary
Vikash Choudhary

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

Ondra Žižka
Ondra Žižka

Reputation: 46904

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.

Upvotes: 14

fahadash
fahadash

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

Jyoti Dhiman
Jyoti Dhiman

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

Mohamed Anees A
Mohamed Anees A

Reputation: 4601

If you did use Homebrew to install BASH,

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

Upvotes: 2

Marco Navarro
Marco Navarro

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

ash
ash

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

Gilles Quénot
Gilles Quénot

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

Related Questions