-1

I'm on a Centos server and when I tried to run

./script.sh

I get the Permission Denied error even after I tried adding chmod +x script.sh.

sh script.sh works though.

UPDATE

The script file starts with #!/bin/sh

SachiDangalla
  • 105
  • 1
  • 1
  • 5

1 Answers1

1

Most probably your script lacks a "shebang". The system tries to read which interpreting program should be executed to run the script. A "shebang" is recognized by the system if it is on the very first line and starts with #!.

Examples:

#!/bin/bash
#!/bin/sh
#!/usr/bin/env python
#!/bin/sed

Note that #! is a comment otherwise in most scripting languages, so it will not error out if you run it with a specific interpreting program from the command line like so:

$ bash ./script.sh

More information: https://en.wikipedia.org/wiki/Shebang_(Unix)

Kusalananda
  • 320,670
  • 36
  • 633
  • 936
Hkoof
  • 1,597
  • 10
  • 11
  • It has the line `#!/bin/sh` – SachiDangalla Oct 01 '18 at 09:21
  • Does `/bin/sh` actually exist on your system? Is it a shell binary? Does `/bin/sh` have executable (x) permission set? – Hkoof Oct 01 '18 at 09:30
  • What is the difference between a sh and bash hashbang? – Sam Oct 01 '18 at 09:32
  • See https://stackoverflow.com/questions/5725296/difference-between-sh-and-bash – pLumo Oct 01 '18 at 11:25
  • @Sam, it runs a different shell. Not all systems have Bash, and even on those that do, `/bin/sh` might not be Bash (e.g. Debian and Ubuntu). See e.g. https://unix.stackexchange.com/q/250913/170373 – ilkkachu Oct 01 '18 at 11:27
  • Also, AFAIK, the shell is supposed to try to interpret the script itself (or run `/bin/sh` on it) if there's no shebang, or rather, if `execve()` doesn't work on it. At least Linux gives `ENOEXEC` ("Exec format error") instead of `EACCESS` ("Permission denied") if the file isn't recognized as an executable, so the error message here doesn't really match that situation. – ilkkachu Oct 01 '18 at 11:57