How to include file in a bash shell script

LinuxBashInclude

Linux Problem Overview


Is there a way to include another shell script in a shell script to be able to access its functions?

Like how in PHP you can use the include directive with other PHP files in order to run the functions that are contained within simply by calling the function name.

Linux Solutions


Solution 1 - Linux

Simply put inside your script :

source FILE

Or

. FILE # POSIX compliant


$ LANG=C help source
source: source filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.

Solution 2 - Linux

Above answers are correct, but if you run script in another folder, there will be some problem.

For example, a.sh and b.sh are in same folder, a use . ./b.sh to include b.

When you run script out of the folder, for example, xx/xx/xx/a.sh, file b.sh will not found: ./b.sh: No such file or directory.

So I use

. $(dirname "$0")/b.sh

Solution 3 - Linux

Yes, use source or the short form which is just .:

. other_script.sh

Solution 4 - Linux

Syntax is source <file-name>

ex. source config.sh

script - config.sh

USERNAME="satish"
EMAIL="[email protected]"

calling script -

#!/bin/bash
source config.sh
echo Welcome ${USERNAME}!
echo Your email is ${EMAIL}.

You can learn to include a bash script in another bash script here.

Solution 5 - Linux

In my situation, in order to include color.sh from the same directory in init.sh, I had to do something as follows.

. ./color.sh

Not sure why the ./ and not color.sh directly. The content of color.sh is as follows.

RED=`tput setaf 1`
GREEN=`tput setaf 2`
BLUE=`tput setaf 4`
BOLD=`tput bold`
RESET=`tput sgr0`

Making use of File color.sh does not error but, the color do not display. I have tested this in Ubuntu 18.04 and the Bash version is:

GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAnthony MillerView Question on Stackoverflow
Solution 1 - LinuxGilles QuenotView Answer on Stackoverflow
Solution 2 - LinuxFancyoungView Answer on Stackoverflow
Solution 3 - LinuxPaulView Answer on Stackoverflow
Solution 4 - LinuxSatish KumarView Answer on Stackoverflow
Solution 5 - LinuxRafView Answer on Stackoverflow