So I've written my first bash script:
#!/bin/bash
echo 'hello world!'
exit
I know it has the right location to bash and is executable:
$ which bash
/bin/bash
$ chmod +x myscript.sh
Now I want to run it from the command line, but I get an error:
$ myscript.sh
myscript.sh: command not found
So instead I try this and it works:
$ bash myscript.sh
hello world!
Is this how I will always need to execute it? I feel like I have executed other scripts without having to precede it with bash
. How can I run myscript.sh without having to precede it with bash
?
Update: Here is a good explanation of why and how to execute a bash script.
Best Answer
You have to make the file executable. You can do that with
where is the name of your script and then you have to prepend it with
./
to instruct the shell to run a file in the local directory, like:You can only run files that are in your
PATH
or that you specify a path to them../
, the local directory, is not in thePATH
by default because someone may use it for nefarious purposes. Imagine a script calledls
dropped in a directory, you go inside that directory, runls
and that script does something bad.While you are at it you may want to make it more portable by running shell instead of bash by using:
or by running bash no matter where it is installed as long as it is installed: