Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getting permission to execute a bash script

Tags:

bash

ubuntu

im trying to get my server to execute a simple bash script:

   #!/bin/bash          
   echo Hello World

After saving this to /var/www/script (im saving it to the web directory for no reason in particular) i try and execute it with

exec /var/www/script

This fails returning i don't have permission to execute it, sudo exec isn't a thing so i do sudo -i then run exec /var/www/script as root and i still have permission denied. I fairly uncertain why executing it as root doesn't work. Im wondering if i'm

A) using the wrong command to execute a bash script
B) have incorrect formatting in the script
C) shouldn't have saved it to /var/www/
D) done some other thing that i'm not even aware of.

Im running ubuntu server 16.04 if that helps.

like image 547
James Oswald Avatar asked Mar 05 '26 08:03

James Oswald


2 Answers

File Permissions

First, make sure that you have the correct file permissions:

chmod +x /var/www/script_name #Gives the current user execute permissions

Executing Your Bash Script

In order to execute your bash script, the easiest option is to just simply call it (without any additional commands) by typing in the relative path to the script:

/var/www/script_name

There are other options for explicitly executing your script from the shell (in your case, use the bash shell to execute your script as a bash script). From TLDP documentation...

A script can also explicitly be executed by a given shell, but generally we only do this if we want to obtain special behavior, such as checking if the script works with another shell or printing traces for debugging:

rbash script_name.sh # Execute using the restricted bash shell
sh script_name.sh # Execute using the sh shell
bash -x script_name.sh # Execute using the bash shell

A Note on File Extensions: "Shebang" line > File extension

It is not an advised practice to use file extensions with your scripts, especially if you think your code may evolve beyond its current functionality.

Just in case you were wondering if the file extension may be your problem... it is not. It is important that you know that the file extension of a script isn't necessary at all. What matter is what you put in the "shebang" line:

To use the sh shell:

#!/bin/sh

To use the bash shell:

#!/bin/bash

It won't matter what file extension you use - the "shebang" line indicates what shell will be used to execute the script. You could save a script with the "shebang" of #!/bin/bash as script_name.py, but it would remain a bash script. If you attempt to execute it, ./script_name.py, it would be executed as a bash script.

As @Arjan mentioned in the comments, using file extensions for your script could lead to unnecessary complications if you decide to change the implementation of your project (i.e., a different shell / language):

I could decide later to shift my project to sh, python, perl, C, etc. Perhaps because I want to add functionality. Perhaps because I want to make it portable to a system without bash. It would be much more difficult if I used the .sh file extension, since then I'd need to change all my references to the script just because I changed its implementation.

like image 75
Vladislav Martin Avatar answered Mar 07 '26 22:03

Vladislav Martin


You have two choices:

  1. Run it as an argument to bash:

    bash /var/www/script
    
  2. Alternatively, set the execute bit:

    chmod +x /var/www/script
    

    And, now you can execute it directly:

    /var/www/script
    
like image 39
John1024 Avatar answered Mar 07 '26 22:03

John1024



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!