23

I have a function err() in file abc. The files do not have a .sh extension, but they start with #!/bin/bash.

err () {
    echo "${1}" >&2 
}

Now I am importing it in a different file xyz:

source abc
someFunction(){ 
    err "Failed to back up"
}

Is this the right way of importing?

0

3 Answers 3

25

Yes, you can do like you mentioned above or like: . FILENAME

The file need not to end with .sh

Sign up to request clarification or add additional context in comments.

Comments

5

That's fine, here are some more hints:

  1. Use a naming convention for functions, for example prefix the function name with f_, for example f_err. Function calls appear no different as other commands, this is a hint to the reader. It also reduces the chances of a name collision.

  2. You need read access only, and you do not need the #!/bin/bash (its just a comment).

  3. In Bash, some options have to be set before function parsing. For example, shopt -s extglob has to be done before and outside the function if it uses extended globbing. Putting that inside the function is too late.

  4. Bash does not support the FPATH environment variable or autoload (as Korn shell does).

Comments

3

You need to export newly created functions

at end of abc add this:

export -f err

1 Comment

You only need to export the function to make it available in a subshell (one started by running another instance of bash). After sourcing the file, any functions defined therein will be available in the current shell.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.