Reputation: 7204
I have a bash script like:
#!/bin/bash
echo Hello world!
How do I execute this in Terminal?
Upvotes: 200
Views: 840147
Reputation: 121
If you are in a directory or folder where the script file is available then simply change the file permission in executable mode by doing
chmod +x your_filename.sh
After that you will run the script by using the following command.
$ bash ./your_filename.sh
Above the "." represent the current directory.
Upvotes: -3
Reputation: 705
This is an old thread, but I happened across it and I'm surprised nobody has put up a complete answer yet. So here goes...
The answer is below, but first ... if you are asking this question, here are a few other tidbits to help you on your way:
ls
may be built-in's, but most commands are actually separate small programs. (This is where the "Zen of Unix" comes in ... "(i) Make each program do one thing well.")echo $PATH
to see), then you must include it. If you want to run a script from the current directory, use ./
before it. This ./
thing means 'here in the current directory.'sudo
to do any of this. This command is reserved for running commands as another user or a 'root' (administrator) user. Running scripts with sudo
allows much greater danger of screwing things up. So if you don't know the exact reason for using sudo
, don't use it. Great post here.~/bin
folder.# A good place to put your scripts is in your ~/bin folder.
> cd ~/bin # or cd $HOME/bin
> ls -l
You will see a listing with owners and permissions. You will notice that you 'own' all of the files in this directory. You have full control over this directory and nobody else can easily modify it.
If it does not exist, you can create one:
> mkdir -p ~/bin && cd ~/bin
> pwd
/Users/Userxxxx/bin
# type the name of the script with the full path
> /path/to/script.sh
# execute the script from the directory it is in
> ./script.sh
# place the script in a directory that is on the PATH
> script.sh
# ... to see the list of directories in the path, use:
> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ... or for a list that is easier to read:
> echo -e ${PATH//:/\\n}
# or
> printf "%b" "${PATH//:/\\n}"
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
# set the 'execute' permissions on the script
> chmod +x /path/to/script.sh
# using specific permissions instead
# FYI, this makes these scripts inaccessible by ANYONE but an administrator
> chmod 700 /path/to/script.sh
# set all files in your script directory to execute permissions
> chmod +x ~/bin/*
There is a great discussion of permissions with a cool chart here.
> bash /path/to/script.sh
...
> php /path/to/script.php
...
> python3 /path/to/script.py
...
#!/bin/bash
) in your example. If you have that as the first line of your script, the system will use that program to execute the script. No need for typing programs or using extensions.PATH
by using #!/usr/bin/env
followed by the program name (e.g. #!/usr/bin/env bash
or #!/usr/bin/env python3
). There are pros and cons as thoroughly discussed here.Note: This "portable" shebang may not be as portable as it seems. As with anything over 50 years old and steeped in numerous options that never work out quite the way you expect them ... there is a heated debate. The most recent one I saw that is actually quite different from most ideas is the "portable" perl-bang:
#!/bin/sh
exec perl -x "$0" "$@"
#!perl
Upvotes: 41
Reputation: 5019
And yet one more way
. /path/to/script
What is the meaning of the dot?
Upvotes: 8
Reputation: 925
Firstly you have to make it executable using: chmod +x name_of_your_file_script
.
After you made it executable, you can run it using ./same_name_of_your_file_script
Upvotes: 19
Reputation: 60413
$prompt: /path/to/script
and hit enter. Note you need to make sure the script has execute permissions.
Upvotes: 72
Reputation: 169
Change your directory to where script is located by using cd command
Then type
bash program-name.sh
Upvotes: 16
Reputation: 360615
Yet another way to execute it (this time without setting execute permissions):
bash /path/to/scriptname
Upvotes: 201
Reputation: 83729
cd to the directory that contains the script, or put it in a bin folder that is in your $PATH
then type
./scriptname.sh
if in the same directory or
scriptname.sh
if it's in the bin folder.
Upvotes: 48