Bash Script Permission denied & Bad Interpreter

43,247

Solution 1

You have a space instead of a forward slash here:

#! /bin bash

Should be:

#! /bin/bash

or simply

#!/bin/bash

(the first space is optional).  The shebang (#!) should be followed by the path to an executable, which may be followed by one argument, e.g.,

#!/usr/bin/env sh

In this case /usr/bin/env is the executable; see man env for details.

Just /bin refers to a directory.

Solution 2

It is worth noting that if the mountpoint on which your script resides has the 'noexec' attribute, then you can shebang all you want and it still won't work, but invoking the interpreter with the script as an argument will (so long as that in turn doesn't try to run another script on a noexec mount).

Share:
43,247

Related videos on Youtube

Davlog
Author by

Davlog

I'm currently 16 years old and I'm fascinated by computers. I started with Visual Basic, switched to C# and then to C++. I'm still learning C++ but two other languages infected me! C and Assembly. In the future I wanna learn PHP, HTML (I know, easy...), JavaScript, Common Lisp, Python and Perl.

Updated on September 18, 2022

Comments

  • Davlog
    Davlog over 1 year

    I'm on a kali linux 64 bit.

    I have created a python script which takes 2 arguments to start. I don't want to type out every time the exact same paths or search in the history of the commands I used in terminal. So I decided to create a simple script which calls the python script with its arguments.

    #! /bin bash
    
    python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/
    

    It is the exact same command I would use in terminal. However, I get an error message when I try to execute the script file.

    bash: ./wtf.sh: /bin: bad interpreter: Permission denied
    

    wtf.sh has executable rights.

    What is wrong?

  • Davlog
    Davlog almost 10 years
    damn, silly me! Thanks! Didn't see that...
  • G-Man Says 'Reinstate Monica'
    G-Man Says 'Reinstate Monica' over 8 years
    You might want to get into the habit of using #!/bin/sh (instead of #!/bin/bash) unless you know that you are using bash features.
  • goldilocks
    goldilocks over 8 years
    @G-Man Thanks for cleaning this up a bit. WRT bash vs. sh, I was just following the pattern from the question (although my tendency is to only use sh when I know I'm not using bash features).
  • noobninja
    noobninja almost 8 years
    In Ubuntu terminal, which bash is helpful. That returns /bin/bash. At the top of my Bash script I add #!/bin/bash. Then when I want to run the Bash script, I enter bash foo.sh. So which sh is used the same way. sh foo.sh
  • Wildcard
    Wildcard over 7 years
    @G-Man, in the workaday world there are an unfortunate number of people who don't know whether they are using Bash features or not. In many cases it's preferable to have a script not run at all (because Bash is specified in the shebang but is missing) rather than run and do something unexpected (because /bin/sh is something other than Bash and there are unnoticed Bashisms in the script). See here.